Malloc内存检查是否连续
Malloc memory check if contiguous
我正在实现一个内存池类型的类。其中一个方法分配B字节的内存并向其返回一个空指针,同时在内部处理缓冲区并在旧内存中移动,以确保对象在其生存期内管理的所有内存都是连续的(类似于std::vector将有一个预先分配的缓冲区,并在缓冲区用完后分配额外的空间,将信息从旧缓冲区复制到新缓冲区以确保所有内存是连续的)。我的问题是,我如何确保或检查所有分配的内存是连续的?如果我想使用手动从一个对象跳到另一个对象
static_cast<desired_type*>(buffer_pointer + N)
如果对象的位置偏移了某个量,而不仅仅是以前对象大小的总和,那么这种方法自然会失败。我是编写自定义内存池的新手,所以我只是想知道,我如何确保分配的内存是非碎片的,或者访问新碎片的位置,以便仍然可以手动索引malloc()-ed内存块?非常感谢。
如果我理解你的问题,你会问你是否可以多次调用malloc返回连续内存。
答案是否定的,内存在多个malloc之间不会是连续的,因为大多数内存管理器都会在分配的内存周围放置头/尾数据,以进行自己的管理,并在边缘放置保护标记以检测溢出——细节在很大程度上取决于实现。
对于您自己的内存管理,您需要使用malloc分配一个足够大的块,然后将其拆分并自己管理内部。
您可以将此github项目视为所需管理的一个示例:https://github.com/bcorriveau/memblock
相关文章:
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- 如何知道n!是否可以表示为三个连续数字的乘法?
- 是否确保 2 个连续的 std::chrono::steady_clock::now() 不相等?
- std::set 是否将对象连续存储在内存中?
- vector是否为std::移动的对象连续分配内存
- 是否存在一个范围::视图::group_by对应项,它将所有元素都考虑在内,而不是只考虑连续的元素
- 确定数组是否可以旋转 3 个连续的数组元素进行排序?
- POD 结构(相同类型的成员):成员是否位于连续的内存位置?
- "map"容器C++是否对字符串的连续子字符串应用 Rabin-Karp 算法?
- 在编译时检查特征类型保存的数据在内存中是否连续
- 持续的时间访问是否在某个时候意味着连续内存
- Malloc内存检查是否连续
- 是否有任何方法可以比较C 中的STD ::的两个连续元素
- RandomAccessIterator是否意味着数据在内存中是连续的
- std::vector中的数据存储是否连续
- 如何检查迭代器是否形成连续的内存区域
- 对于同一循环的这两个连续组,是否有更有效的解决方案
- 是否可以将指向已知大小的连续内存的指针转换为结构
- 如何检测两个连续的视频帧是否相同
- 是否可以构造与 3 个或更多非连续 UTF 代码点匹配的 PCRE UTF-8 正则表达式