优化全局运算符new的优化是否有任何问题将所有分配都集中到下一个2的幂?从理论上讲,这可以降低碎片,但代价是更高的最坏情况内存消耗,但操作系统是否已经采用这种技术的冗余行为,或者它是否尽力节省内存?
基本上,考虑到内存使用不是性能问题,我应该这样做吗?
答案 0 :(得分:6)
默认的内存分配器可能非常智能,可以很好地处理大量的中小型对象,因为这是最常见的情况。对于所有分配器,请求的字节数永远不会是分配的数量。例如,如果你说:
char * p = new char[3];
分配器几乎肯定会做类似的事情:
char * p = new char[16]; // or some minimum power of 2 block size
除非您能证明您的分配存在实际问题,否则您不应考虑编写自己的新版本。
答案 1 :(得分:4)
你应该尝试实现它以获得乐趣。一旦它起作用,就扔掉它。
答案 2 :(得分:3)
你应该这样做吗?没有。
有两个原因:
总结一下,除非你能证明(通过剖析)它是一个问题,否则不要乱用它。不要过早优化。
答案 3 :(得分:0)
我同意Neil,Alienfluid和Fredoverflow的观点,在大多数情况下你不想编写自己的内存分配器,但我仍然编写了自己的内存分配器大约15年并且多年来对它进行了改进(第一个版本是使用malloc /免费重新定义,使用全局新/删除操作符的更高版本),根据我的经验,优势可能是巨大的: