int a[1000];
int *c;
void foo(void)
{
int b[1000];
memcpy(b, someConstArray, 1000);
c = (int *)malloc(sizeof(b));
memcpy(c, b, 1000);
}
void bar(void)
{
memcpy(a, someConstArray, 1000);
c = (int *)malloc(sizeof(a));
memcpy(c, a, 1000);
}
我知道这个问题已经被问过很多次了,但我需要知道自动分配与静态分配之间的性能差异是什么,例如a
与 b
,相对于彼此。以这种方式声明 a
是否会因为 locality 而影响性能?
在嵌入式系统的 gcc 中编译。
PS:我知道这是一个多余且无用的功能。主要问题是变量分配如何影响性能
最佳答案
在 char* foo(void)
中,您返回了一个无效指针,因为当您退出该函数时,b
不再存在。
两种分配具有相同的性能,只是您使用它们的方式不正确。
b
是在函数foo
被调用时分配到栈上的(性能只是改变栈指针的值)。它在 foo
完成时被释放(再次通过更改堆栈指针)。
a
被分配到某处(我猜是全局的,或者在其他上下文中的堆栈上),并且那里也没有性能影响。
如果您需要在您的函数中分配应该分配给调用者的内存(如在您的 foo
中) - 那么分配应该是动态 - 使用 malloc
(如果是 C++,则为 new
)。然后确实会影响性能,具体取决于相关的内存管理器性能。
关于c - 内存分配性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6352034/