c - 内存分配性能

标签 c

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);
}

我知道这个问题已经被问过很多次了,但我需要知道自动分配与静态分配之间的性能差异是什么,例如ab,相对于彼此。以这种方式声明 a 是否会因为 locality 而影响性能?

在嵌入式系统的 gcc 中编译。

PS:我知道这是一个多余且无用的功能。主要问题是变量分配如何影响性能

最佳答案

char* foo(void) 中,您返回了一个无效指针,因为当您退出该函数时,b 不再存在。

两种分配具有相同的性能,只是您使用它们的方式不正确

b 是在函数foo 被调用时分配到栈上的(性能只是改变栈指针的值)。它在 foo 完成时被释放(再次通过更改堆栈指针)。

a 被分配到某处(我猜是全局的,或者在其他上下文中的堆栈上),并且那里也没有性能影响。

如果您需要在您的函数中分配应该分配给调用者的内存(如在您的 foo 中) - 那么分配应该是动态 - 使用 malloc(如果是 C++,则为 new)。然后确实会影响性能,具体取决于相关的内存管理器性能。

关于c - 内存分配性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6352034/

相关文章:

c++ - 从用户定义的类/指向成员函数的指针子类化编辑控件

c - 运行时检查失败 #2 - 变量 'char' 周围的堆栈已损坏

c++ - 如何正确比较两个无符号字符?

c - 用C从TXT文件中读取变量

c - 如何使用 request_threaded_irq 以便在线程处理程序工作时调用中断处理程序?

c - 如何知道utf8字符串中的字符数

c - 不含数组的结构体的生命周期

c - NodeJS 退出代码左移 8 位

c - C 中的全局指针?

c - 我如何知道 cl.exe 应用的是 c89 还是 c99?