提问人:lordeji 提问时间:5/26/2023 更新时间:5/26/2023 访问量:52
为我自己的 malloc 实现创建一个标志
Create a flag for my own malloc implementation
问:
因此,正如我在标题中所说,我目前正在研究自己的动态内存分配系统实现。
问题是,因为我希望实现尽可能小,所以在内存中有一个特定的“标志”,该标志表示之后的内存被占用(+他的大小)
我在记忆中想象这样的事情:...... | flag | size | (start_of_array) | ......
我想使用像 SIZE_MAX 这样的大值,因为从技术上讲,它看起来像 64 个在内存中排列,我认为在内存中找到这个并不常见,但这并非不可能,因此这种技术容易出错......
有没有一种更安全的方法来做到这一点,并创造一个无论如何都不会被机器创造的价值?
提前致谢 !
答:
0赞
John Bollinger
5/26/2023
#1
有没有一种更安全的方法来做到这一点,并创造一个无论如何都不会被机器创造的价值?
不,除了分配器之外,您没有可以放心地假设不会放置在内存中的值。就其价值而言,这是一个特别糟糕的选择。它本身具有多种可能的用途,并且在相应的有符号整数类型中也具有与 -1 相同的表示形式,该类型具有自己的多种用途。SIZE_MAX
您不需要使用特殊值来识别内存块。您通常会从一个或少量大型连续区域中分配内存。分配元数据可以单独保存,但分配器将元数据放在同一空间中的情况并不少见,类似于您描述的内容。在这种情况下,您只需要第一个块的位置。该块附带的元数据,尤其是其记录的大小,告诉您如何找到下一个块(以及是否有),并告诉您如何找到下一个块,等等。
评论