19得票5回答
哪种内存分配算法最适合于性能和时间关键的C++应用程序?

我提出这个问题是为了确定哪种内存分配算法可以在性能关键的应用中(如游戏引擎或嵌入式应用程序)提供更好的结果。结果实际上取决于内存碎片化的百分比和内存请求的时间确定性。 教科书上有几种算法(例如伙伴内存分配),但也有其他算法,如TLSF。因此,就可用的内存分配算法而言,哪一种最快且导致的碎片最...

17得票2回答
内存碎片化

当我随机、嵌套、大小不同地使用malloc()和free()时,由于这些操作会留下一大堆小的非连续内存区域,因此在某个时刻内存会被分段。 以下是一些问题: 如果经常这样做使得内存被强制分段,然后所有这些内存区域都被free()掉,我可以假设这些空闲内存区域会连接回其原始的连续大小吗? 如果...

16得票3回答
使用字节数组时的堆碎片问题

我有一个使用C# 4.0编写的单生产者/单消费者应用程序,它以块为单位传输大量数据。尽管没有新的内存分配,但是经过一段时间后我会耗尽内存。 我使用Redgate Memory Profiler对内存进行了分析,发现有很多可用的空闲内存。但由于碎片化,无法使用这些空闲内存。 我使用阻塞集合作...

15得票1回答
理解Hotspot JVM进程的内部碎片特性

针对堆内和堆外分配,涉及到三种主要的垃圾收集器CMS、Parallel Old和G1。 当前我所了解(或者认为自己了解)的情况如下: 所有对象(堆内分配)的分配都会向上舍入至8字节边界(或更大的2的幂次方,由-XX:ObjectAlignmentInBytes配置)。 G1 对于小于...

12得票2回答
为什么64位机器上的内存碎片成为问题?

在32位机器上,每个进程都会获得4GB的虚拟空间。在这种情况下,人们可能会担心由于内存碎片而遇到麻烦。但是,在64位机器上,我们在理论上有一个巨大的可寻址虚拟内存,所以为什么内存碎片仍然是一个问题呢(如果是的话)?

11得票5回答
“pragma pack 1”能够帮助避免堆碎片吗?

在我的程序中,我发现一些驻留大小增加。我认为这是由于堆碎片化引起的。因此,我计划使用 #pragma pack 1。这样做会减少堆碎片化吗? 是否会产生其他额外开销? 我该不该这样做?

10得票2回答
"内存碎片化"仍然存在问题吗?

我有点困惑。在操作系统课程中,我们被告知所有操作系统都通过分页或分段来处理内存碎片化,并且根本没有连续的物理内存分配。操作系统使用不同级别的寻址(逻辑/物理)来避免连续的内存分配。现在这里有很多讨论。我的问题是: 对于支持逻辑寻址的操作系统,在C++编程中是否真的存在这个问题(是否会因为内存碎...

9得票6回答
在编写代码时考虑内存碎片化:是过早优化还是不是?

我正在开发一个使用C++编写的大型服务器应用程序。这个服务器需要长时间运行而无需重新启动。由于我们的内存消耗随着时间的推移而增加,因此碎片化已经成为了一个疑点。到目前为止,我们的测量方法是比较私有字节和虚拟字节,并分析这两个数字之间的差异。 我的处理碎片化的一般方法是留待分析。对于其他类似整...

9得票1回答
C++分配速度变慢的奇怪现象

请问为什么以下情况会发生: 我有两台电脑: 我的工作电脑 服务器 我维护一个C++程序(使用msvc 2005 c++编译),在服务器上运行速度过慢,但在我的电脑上却没有问题。 我进行了测量(使用GetThreadTimes等方法),可以明确地说瓶颈就在于内存分配(new/mall...

8得票3回答
分配/释放大量小对象的策略

我正在研究一种缓存算法,有些具有挑战性。基本上,它需要分配大量的小对象(双数组,1到256个元素),对象可通过映射值访问,map[key] = array。初始化数组的时间可能相当长,通常超过10,000个CPU周期。 所谓“大量”,指的是总共约1GB。对象可能需要按需弹出/推入,通常在随机...