Chr*_*ris 7 c memory memory-management dynamic-memory-allocation
我想将程序状态存储在文件中.所以我有一个mmapped文件,我执行操作,然后保存它,以后可能会使用它.
这对于简单的事情来说很好,但如果我想要一个需要动态内存分配的长期数据结构,我需要一个内存分配器,我可以强制在我已映射的页面中分配.
我很确定我不能用标准的c malloc来做这件事,我看了jemalloc,我不知道我能不能看到任何东西.我不知道我是否采用了错误的方法,但有没有办法在使用之前指定堆的位置/大小?
对于这样的事情,你真的不想要动态内存分配.你想要的是一个数组,它使用指向元素的索引值而不是实际指针.
假设您想要实现二叉树.你可以按如下方式建模:
struct tree {
int free;
int value;
int left;
int right;
};
Run Code Online (Sandbox Code Playgroud)
的left和right字段包含的节点的索引,以向左和所述给定节点的右侧,具有值-1表明没有这样的节点(即,其相当于一个NULL指针在此上下文中).
该free字段可用作标志,以确定当前是否正在使用该数组的给定元素.如果节点标记为free等于1,则该left字段指向下一个空闲节点,从而可以轻松找到空闲节点.
节点0的特殊之处在于它是空闲列表的开头,并且该right字段指向树的根节点.
然后是以下树:
7
/ \
3 10
/ \ / \
1 4 8 12
Run Code Online (Sandbox Code Playgroud)
可以建模如下:
free value left right
---------------------------
0 | 1 | 0 | 8 | 1 |
---------------------------
1 | 0 | 7 | 2 | 3 |
---------------------------
2 | 0 | 3 | 4 | 5 |
---------------------------
3 | 0 | 10 | 6 | 7 |
---------------------------
4 | 0 | 1 | -1 | -1 |
---------------------------
5 | 0 | 4 | -1 | -1 |
---------------------------
6 | 0 | 8 | -1 | -1 |
---------------------------
7 | 0 | 12 | -1 | -1 |
---------------------------
8 | 1 | 0 | 9 | -1 |
---------------------------
9 | 1 | 0 | -1 | -1 |
---------------------------
Run Code Online (Sandbox Code Playgroud)
这样的树可以被memmap,或者使用malloc/ realloc来保存在内存中以管理大小.
如果您的数据结构包含任何类型的字符串,您将希望您的结构包含固定大小的字符数组而不是指针,以便它们正确序列化.
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |