memory-fragmentation相关内容

libc malloc与Linux内核伙伴分配器

malloc是否担心Linux内核中的内部碎片?例如,当我要分配5个页面时,将malloc舍入为2:5-> 8的幂,以避免内核内部碎片,因为linux内核使用伙伴系统作为页面分配器. 解决方案 至少对于glibc,它实际上并不关心内核中的碎片.除了很小或非常大的分配外,它大多是“最佳匹配"分配器.这是glibc" 为什么使用此malloc? 这不是最快,最节省空间,最可移植或有 ..
发布时间:2021-05-30 18:39:27 其他开发

使用字节数组时的堆碎片

我有一个C#4.0应用程序(单个生产者/单个使用者),该应用程序以块的形式传输大量数据.尽管没有新的内存分配,但过一会儿我就用光了内存. 我使用Redgate内存探查器对内存进行了探查,那里有很多可用内存.它说由于碎片导致无法使用空闲内存. 我使用阻塞集合作为缓冲区,使用字节数组作为成员: BlockingCollection segments = new Blo ..
发布时间:2020-07-18 02:30:47 C#/.NET

“存储器碎片"指的是“存储器碎片".还是一个问题吗?

我有点困惑.在操作系统课程中,我们被告知所有操作系统都通过分页或分段来处理内存碎片,并且根本没有连续的物理内存分配. OS使用不同级别的寻址(逻辑/物理)来避免连续的内存分配.现在此处有如此多的讨论.我的问题是: 这个问题在支持逻辑寻址的OS的C ++编程中是否存在(是否仅由于内存碎片而导致任何进程崩溃)?如果是,为什么每个操作系统都首先尝试避免连续寻址? 解决方案 分为两层:虚拟进程地址 ..
发布时间:2020-05-08 22:03:42 C/C++开发

哪种算法适用于小内存块的连续重新分配?

在C程序中,我遇到需要大量内存块的事务,我需要知道是否存在用于处理所有这些malloc/free的算法或最佳实践方法,我已经使用数组来存储这些内存块但是在某个时候数组本身变满了,重新分配数组只会浪费更多,解决这个问题的优雅方法是什么? 解决方案 在这种情况下,最好的算法是免费列表分配器+二进制搜索树. 您要从系统中请求一个大内存块,然后从该块中分配固定大小的内存块.当块已满时,您正在 ..

Linux:如何检查进程可用的最大连续地址范围

我想在命令行中输入pid并获取尚未保留的最大连续地址空间.有任何想法吗? 我们的32位应用程序(运行在64位RHEL 5.4上)在运行了一段时间(例如24小时)后便消失了.当时它最多只能使用2.5 gb的内存,但我们摆脱了内存不足的错误.我们认为它无法映射大型文件,因为该应用程序的内存空间是零散的.我想去生产服务器,然后测试一下那个理论. 解决方案 我上面的评论的更好的版本: ..
发布时间:2020-04-23 11:05:13 服务器开发

C ++中的内存碎片

我想使用malloc()/ new为变量m分配256KB内存。 然后,使用m来存储字符串和数字等数据。 我的问题是如何将数据保存到m并检索它们。 例如,如何将int 123456存储在偏移量0到3中, X? 或者从偏移量4到8存储“David”字符串(或使用\0存储9个字符串),然后将其转换为变量s? 解决方案 您可以通过转换指针来存储整数。 unsigned char ..
发布时间:2016-11-03 01:20:17 C/C++开发

CAN"杂包1 QUOT;有助于避免堆碎片?

在我的节目,我看到一些居民尺寸增加。我想这是因为堆碎片。 所以我打算使用的#pragma包1 。 这将减少堆不成? 会不会是有一些其他的开销? 我应该去为它或不? 解决方案 有一个名为内存池很好的验证技术 。它的设计特别是减少内存碎片和内存泄漏帮助。它应该在情况下使用,其中内存碎片变成的程序功能的瓶颈。 “杂包1”是没有帮助的,以避免堆碎片。 “杂组件1'用来从结构去除填充字节 ..
发布时间:2016-08-19 13:32:23 C/C++开发

.NET应用程序的内存使用情况 - 高未使用.NET和非托管内存和碎片

我使用蚂蚁内存分析器来诊断我面临着在我的.NET 2.0的应用程序之一增加了内存泄漏。 我把这个过程的7快照历时7.5小时,这里是数据的表格重新presentation获得 - G1 reprsents第1代的尺寸和G2第2代的尺寸。除了非托管空间和专用字节,所有其他值都在MB。 我的问题是 - 为什么会出现,即使堆的大小是低? 如此高的未使用的.NET空间 我的大对象堆进到最多约 ..
发布时间:2015-11-25 13:31:10 C#/.NET