gpt4 book ai didi

c - 需要将内存对齐到 2 的幂,并将程序中断对齐到 2 * getpagesize() 的倍数(C 中)

转载 作者:行者123 更新时间:2023-11-30 16:05:51 24 4
gpt4 key购买 nike

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

我必须遵循两条规则:

1)我必须将我的内存对齐到 2 的幂

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

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

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

规则 1)我只需要使我的 malloc 返回值(因此 malloc 以十六进制形式返回的地址)为 2 的倍数?

对于规则 2)

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

最佳答案

1) I must align my memory on a power of 2

Rule 1) I just need to make the return of my malloc (so the adress returned by malloc in hexa) a multiple of 2 ?

对于按 2 的幂对齐的地址,即 2p,该地址必须是 2p 的倍数>.

2) I must align the break (program end data segment) on a multiple of 2 pages.

the break is the last adress in the heap if i'm not wrong, do i need to set my break like this (the break - the heap start) % (2 * getpagesize())== 0? or just the break % (2 * getpagesize() == 0?

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

关于c - 需要将内存对齐到 2 的幂,并将程序中断对齐到 2 * getpagesize() 的倍数(C 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60142949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com