我可以指定堆的位置来序列化我的数据吗?
Can I specify the location of the heap to serialize my data?
我想将程序状态存储在文件中。所以我有一个映射文件,我对其执行操作然后保存它并可能在以后使用它。
这对于简单的事情来说很好,但如果我想要一个需要动态内存分配的长期数据结构,我需要一个内存分配器,我可以强制在我映射的页面内分配。
我相当确定我不能用标准的 c malloc 来做到这一点,我已经看过 jemalloc,但我不知道我是否能在那里看到任何东西。我不知道我这样做是否走错了路,但是有没有 any 方法在使用堆之前指定堆的 location/size?
对于这样的事情,您真的不需要动态内存分配。你想要的是一个数组,它使用指向元素的索引值而不是实际指针。
假设你想实现一个二叉树。您可以按如下方式对其建模:
struct tree {
int free;
int value;
int left;
int right;
};
left
和right
字段包含给定节点左右节点的索引,值为-1表示没有该节点(即等价指向此上下文中的 NULL 指针)。
free
字段可用作标志,以确定数组的给定元素当前是否正在使用。如果节点标记free
等于1,则left
字段指向下一个空闲节点,便于查找空闲节点。
0号节点比较特殊,它是free list的开始,right
字段指向树的根节点。
然后是下面的树:
7
/ \
3 10
/ \ / \
1 4 8 12
可以建模如下:
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 |
---------------------------
这样的树可以被映射,或者使用 malloc
/ realloc
来管理大小。
如果您的数据结构包含任何类型的字符串,您会希望您的结构包含固定大小的字符数组而不是指针,以便它们正确序列化。
我想将程序状态存储在文件中。所以我有一个映射文件,我对其执行操作然后保存它并可能在以后使用它。
这对于简单的事情来说很好,但如果我想要一个需要动态内存分配的长期数据结构,我需要一个内存分配器,我可以强制在我映射的页面内分配。
我相当确定我不能用标准的 c malloc 来做到这一点,我已经看过 jemalloc,但我不知道我是否能在那里看到任何东西。我不知道我这样做是否走错了路,但是有没有 any 方法在使用堆之前指定堆的 location/size?
对于这样的事情,您真的不需要动态内存分配。你想要的是一个数组,它使用指向元素的索引值而不是实际指针。
假设你想实现一个二叉树。您可以按如下方式对其建模:
struct tree {
int free;
int value;
int left;
int right;
};
left
和right
字段包含给定节点左右节点的索引,值为-1表示没有该节点(即等价指向此上下文中的 NULL 指针)。
free
字段可用作标志,以确定数组的给定元素当前是否正在使用。如果节点标记free
等于1,则left
字段指向下一个空闲节点,便于查找空闲节点。
0号节点比较特殊,它是free list的开始,right
字段指向树的根节点。
然后是下面的树:
7
/ \
3 10
/ \ / \
1 4 8 12
可以建模如下:
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 |
---------------------------
这样的树可以被映射,或者使用 malloc
/ realloc
来管理大小。
如果您的数据结构包含任何类型的字符串,您会希望您的结构包含固定大小的字符数组而不是指针,以便它们正确序列化。