在我的程序中,我发现一些驻留大小增加。我认为这是由于堆碎片化引起的。因此,我计划使用 #pragma pack 1
。这样做会减少堆碎片化吗?
是否会产生其他额外开销?
我该不该这样做?
在我的程序中,我发现一些驻留大小增加。我认为这是由于堆碎片化引起的。因此,我计划使用 #pragma pack 1
。这样做会减少堆碎片化吗?
是否会产生其他额外开销?
我该不该这样做?
有一种被证明很有效的技术叫做内存池。它专门设计用于减少内存碎片和帮助解决内存泄漏问题。在程序功能受到内存碎片影响时,应该使用它。
'pragma pack 1'无法帮助避免堆内存碎片。
'pragma pack 1'用于消除结构体中的填充字节,以帮助在程序之间传输二进制结构。
这仅仅是操作系统的工作原理。当你释放已经分配的内存时,它并没有从进程内存映射中被删除。 这是操作系统的一种优化,以防该进程需要再次分配内存,因为那样操作系统不必向进程内存映射添加新的映射。
#pragma pack N
指示编译器按照特定方式对结构的成员进行对齐,使用(N-1)字节填充。例如,如果N为2,则每个char将占用2个字节,一个被赋值,一个是填充。当N为1时,就不会有填充。这将导致更多的碎片化,例如当该结构具有一个char和一个int时,共计5个字节,则会存在奇数字节数量。
参考:#pragma pack effect