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

malloc()的“完美效率”与自动变量,c,variables,malloc,C,Variables,Malloc,我有一段时间习惯打电话给马洛克。然后我意识到,如果代码中没有性能关键的部分,为什么不在一个自动程序上多使用几个千字节,并失去malloc过程可能需要的内存量的准确性呢?这样,在没有明显影响的情况下,可以生成可读性更高的代码。e、 g.临时复制字符串,以便在很少调用的函数中对其进行操作 我的逻辑正确吗?大多数实现版本的malloc实际上并没有分配您指定的确切数量,但实际上分配的数量更多,通常以块大小为增量。如果您需要进行一些小的重新分配,这将提高性能。因此,从一开始就没有任何精确性,局部变量存储在

我有一段时间习惯打电话给马洛克。然后我意识到,如果代码中没有性能关键的部分,为什么不在一个自动程序上多使用几个千字节,并失去malloc过程可能需要的内存量的准确性呢?这样,在没有明显影响的情况下,可以生成可读性更高的代码。e、 g.临时复制字符串,以便在很少调用的函数中对其进行操作


我的逻辑正确吗?

大多数实现版本的malloc实际上并没有分配您指定的确切数量,但实际上分配的数量更多,通常以块大小为增量。如果您需要进行一些小的重新分配,这将提高性能。因此,从一开始就没有任何精确性,局部变量存储在堆栈上,这是有限的。malloc从堆中分配内存,堆也是有限的,但包含的内存要多得多

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

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


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

我假设您希望这样替换代码:

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

关于浪费——偶尔浪费几个字节没有什么错,但是如果你一直这样做,它就会开始累积


但一个更严重的危险是,你需要确保它总是足够的。使用常量是危险的——看起来2000字节应该足够了,但你确定某人不可能需要更多吗?请记住,这类代码很容易造成缓冲区溢出漏洞,并且您在未计算正确大小时节省的工作量可能小于您现在需要执行的额外工作量,以确保您每次读取或写入缓冲区时不会溢出。

I。。。老实说,我不明白。你能澄清一下吗?也许是例子?malloc怎么可能比在堆栈上分配的自动变量更有效?
char big_enough[2000];