Lun*_*oms 10 c linux malloc gcc
哪种是为频繁分配和释放内存的函数分配内存的首选方法?假设此功能在1GHz处理器上每秒调用大约500到1000次.
(请忽略静态和全局变量/分配.我只对这个具体情况感兴趣:)
void Test()
{
ptr=malloc(512) // 512 bytes
...
free(ptr)
}
Run Code Online (Sandbox Code Playgroud)
要么
void Test()
{
struct MyStruct localvar; // 512 byte sized structure
...
}
Run Code Online (Sandbox Code Playgroud)
Bas*_*tch 20
堆栈分配局部变量比堆分配快malloc.但是,总堆栈空间有限(例如,几兆字节).因此,您应该将自己限制为本地堆栈上的"小"数据.(根据今天的标准,512字节很小,但256Kb对于本地堆栈分配来说太大了).
如果你的函数是非常递归的,那么甚至512字节也可能太大,因为你需要为每个递归调用帧.
但malloc每秒呼叫几千次应该是无痛的(恕我直言,典型的小型malloc需要几十微秒).
为了您的好奇心,在C世界之外,您可能对旧的感兴趣A.Appel的纸质垃圾收集可能比堆栈分配更快(但可能缓存性能考虑可能会削弱今天的声明).
本地变量基本上是"免费"分配的,所以如果我们只对性能感兴趣,那么这里没有竞争.
然而: