0

我正在使用 brk、sbrk 和 getpagesize() 重新编码 malloc 函数

我必须遵守两条规则:

1)我必须将我的记忆与 2 的幂对齐

这意味着:如果对 malloc 的调用是: malloc(9); 我必须返回一个 16 字节的块。(最接近 2 的幂);

2)我必须在 2 页的倍数上对齐中断(程序结束数据段)。

我正在考虑规则,我想知道我是否真实;

规则 1)我只需要返回我的 malloc(所以 malloc 以六进制返回的地址)为 2 的倍数?

对于规则 2)

如果我没记错的话,中断是堆中的最后一个地址,我是否需要像这样设置中断(中断 - 堆开始)%(2 * getpagesize())== 0?或者只是 break % (2 * getpagesize() == 0?谢谢

4

1 回答 1

0

1)我必须将我的记忆与 2 的幂对齐

…</p>

规则 1)我只需要返回我的 malloc(所以 malloc 以六进制返回的地址)为 2 的倍数?

对于要在 2 的幂即 2 p上对齐的地址,该地址必须是 2 p 的倍数

2)我必须在 2 页的倍数上对齐中断(程序结束数据段)。

…</p>

如果我没记错的话,中断是堆中的最后一个地址,我是否需要像这样设置中断(中断 - 堆开始)%(2 * getpagesize())== 0?或者只是 break % (2 * getpagesize() == 0?

“设置我的休息时间”这句话不清楚。您需要使用sbrk(0)来获取中断的当前值并计算需要添加多少才能使其成为页面大小的两倍。这告诉您需要从哪里开始一个对齐到两倍于页面大小的内存块。然后你需要额外的内存来包含你想放在那里的任何数量的数据(正在分配的数量)。

于 2020-02-10T13:15:56.043 回答