我正在尝试理解 C 语言,更具体地说是关于内存管理。我有一个函数 func
接受 1 个参数,一个 int 指针。如果我使用 int i
而不是 int *i
它会分配更多内存,因为值会被复制。因为我知道 func1
和 func2
都不会改变 i
变量,所以这两个函数的结果是完全一样的。
如果我多次调用这些函数会发生什么?显然 func1
会表现得更好,对吗? func2
怎么样?它会在每次调用时分配新内存吗?那么分配 10000 * 4 个额外字节?或者只是 4 个额外的字节?
我想它分配了 4 个额外的字节,如果它确实是,那么这个内存是什么时候分配的?是第一次调用函数的时候吗?此外,这 4(?)字节的内存将如何以及何时变为空闲?
void func1(int *i)
{
}
void func2(int i)
{
}
void main()
{
int x = 100;
for(int i = 0; i < 10000 ; i++) func1(&x);
for(int i = 0; i < 10000 ; i++) func2(x);
}
最佳答案
这可能是特定于编译器的(您可以查看 C 规范来确定),但是应该在函数的调用堆栈上分配整数参数。每次调用该函数时,都会分配额外的 4 个字节供其使用,在函数返回时将被释放。
对于函数的引用版本,它会在每次函数调用时为 int 指针分配空间。根据您的机器,它可能更大、更小或与 int 大小相同。比较 sizeof(int)
和 sizeof(int*)
看哪个更大。
关于c - 按值管理函数参数与引用内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29502830/