c - 机器级内存理论

标签 c

我的作业有一个问题,如果有人能给我答案,我会很高兴,但更重要的是,如果他们能向我详细解释机器级别发生的情况。

选择您想要的任何平台并描述机器级别发生的情况 调用 func() 时执行以下代码。

如果 foo 被内联,会发生什么变化?

int foo( int a, int* b)
{
    return a + *b;
}

extern int x;

void func()
{
    int y = 7;
    int r;
    r = foo( x, &y );
    printf("%d\n", r);
}   

最佳答案

使用您的编译器。如果您有GCC ,先试试

 gcc -S -Wall -fverbose-asm -O0 yourcode.c -o yourcode-O0.s

然后通过优化再次编译,例如

 gcc -S -Wall -fverbose-asm -O2 yourcode.c -o yourcode-O2.s

并查看生成的汇编代码:

 less yourcode-O0.s
 less yourcode-O2.s

您甚至可以查看中间 GCC 表示。将 -fdump-tree-all 添加到上面的编译标志中(注意,您将获得数百个文本“转储”文件)。

关于c - 机器级内存理论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24453977/

相关文章:

c - 可变大小数组,来自函数,从函数调用

c - 如何检查lua函数中的 bool 参数

C程序: curl failed writing body

c - 如何阻止 GDB 在 Eclipse 中默认执行 "break main"?

c - 2 C中的数字 float 组

使用回溯的随机遍历 N * M 网格的复杂性

c - 如何修剪格式为 char[] 的字符串?

c - fork() exit(0) 和 wait(NULL) 是如何工作的?

c - 通过 remap_pfn_range 将保留的高端内存映射到用户空间

c - 如何通过 C 更改默认网关