malloc()的“完美效率”VS自动变量

时间:2010-12-12 01:48:46

标签: c variables malloc

我有一段时间习惯在任何事情上调用malloc。然后,如果没有代码的性能关键部分,为什么不在自动上多使用几千字节并且失去malloc过程所需的(可能)内存量的准确性呢?这种方式没有明显的影响,可以使代码更具可读性。例如临时复制一个字符串,用于在很少被调用的函数中操作它。

我的逻辑是否合理?

3 个答案:

答案 0 :(得分:3)

局部变量存储在堆栈中,这是有限的。 malloc()从堆中分配内存,这也是有限的,但包含更多的内存。

我通常不使用malloc(),除非内存量超过我可以安全存储在堆栈中的数量。

对于Windows开发,堆栈通常非常大。您可以存储最多几百个字节的缓冲区而不会有太多麻烦(假设该函数永远不会被递归调用)。

但是,一般来说,如果我需要超过50个字节,我通常会使用malloc()。

答案 1 :(得分:1)

大多数实现版本的malloc()实际上分配您指定的确切数量,但实际上分配更多,通常以块大小为增量。如果您需要进行一些小的重新分配,这会提高性能。

开始时从来没有真正的“准确性”

答案 2 :(得分:1)

我假设您要替换这样的代码:

malloc((foo * 2 + 6) * sizeof(char))

使用

char big_enough[2000];

关于浪费 - 一次又一次浪费几个字节并没有错,但如果你一直这样做,它就会开始加起来。

但更严重的危险是你需要确保它总是足够的。使用常量是危险的 - 看起来2000字节应该足够了但是你确定某人需要更多不可能吗?请记住,这种代码可以轻松地创建缓冲区溢出漏洞,并且您在不计算正确大小时保存的工作可能小于您现在需要做的额外工作量,以检查您是否每次都没有溢出缓冲区你读或写它的时间。