在下面的示例中,我是否在“add”函数中占用了任何本地内存空间?如果没有,参数变量存储在内存中哪里?
void add(int *a, int *b, int *result){
*result = *a + *b;
}
int main(){
int a = 1, b = 2, result;
add(&a, &b, &result);
printf("Result = %d\n", result);
return 0;
}
答案 0 :(得分:1)
功能参数是否会占用本地存储空间?
在下面的示例中,我是否在“add”函数中占用了任何本地内存空间?
这些问题的答案取决于严重您的实施。也许您的实现自动内联函数,因此内联过程可能完全消除函数参数 。您的实现甚至可能将一些运行时逻辑提升到编译时;即,您的整个示例可以在编译期间优化为puts("Result = 2");
。
...替代地
存储在内存中的参数变量在哪里?
通常,参数存储在寄存器存储中。寄存器存储器已提交给程序,否则可能已提交和未使用;将它用于此目的是浪费而不是。
可以说,C不要求寄存器存储存在,因此不应该依赖它。在一天结束时,你不应该关心存储变量的位置;所有重要的是它们存储。
堆栈,堆,注册......谁在乎?它在同一台计算机上都是一样的,对吗?唯一不同的是,当您进行优化时,为了避免过早优化,您应该在优化时只询问这个问题,并使用适合的范围优化。答案 1 :(得分:-1)
根据函数调用约定,参数存储在堆栈或处理器寄存器中。 https://en.m.wikipedia.org/wiki/X86_calling_conventions