小编Dab*_*abo的帖子

for(i = 0; i <10000000000; ++ i)编译成无限循环?

我正在运行一些测试,看看++ i和i ++是如何转换为asm的.我写了一个简单的:

int main()
{
    int i;
    for(i=0;i<1000000;++i);
    return 0;
}  
Run Code Online (Sandbox Code Playgroud)

使用gcc test.c -O0 -o test编译它,并使用objdump -d test检查asm :

4004ed: 48 89 e5                mov    %rsp,%rbp
4004f0: c7 45 fc 00 00 00 00    movl   $0x0,-0x4(%rbp)  // i=0;
4004f7: eb 04                   jmp    4004fd <main+0x11>
4004f9: 83 45 fc 01             addl   $0x1,-0x4(%rbp)     // ++i;
4004fd: 81 7d fc 3f 42 0f 00    cmpl   $0xf423f,-0x4(%rbp) // 
400504: 7e f3                   jle    4004f9 <main+0xd>   //i<1000000;
400506: b8 00 00 00 …
Run Code Online (Sandbox Code Playgroud)

c assembly for-loop

6
推荐指数
2
解决办法
620
查看次数

IF语句中的语句如何工作?

我刚刚在进程间通信中开始编程教育,这段代码是在父进程代码部分编写的.根据我所读到的内容write(),-1如果失败则返回,0如果没有写入,则返回,如果成功则返回pipe()正整数.究竟是如何sizeof(value)帮助我们识别出来的?不是if(write(request[WRITE],&value,sizeof(value) < 1)一个更友好的阅读替代什么的sizeof(value).

if(sizeof(value)!=write(request[WRITE],&value,sizeof(value)))
{
     perror("Cannot write thru pipe.\n");
     return 1;
}
Run Code Online (Sandbox Code Playgroud)

代码说明:变量value是父进程中数字的输入,然后父进程通过子管发送给子进程,子进程对其进行一些算术运算.

任何有关该主题的澄清的帮助都非常适用.

编辑:在提问时如何突出显示我的系统功能?

c linux ipc pipe

0
推荐指数
1
解决办法
71
查看次数

标签 统计

c ×2

assembly ×1

for-loop ×1

ipc ×1

linux ×1

pipe ×1