我正在计划一个在内存中分配大量变量的应用程序 . 与另一个“常规”应用程序不同,我希望将此内存分配给4096字节的特定内存块 . 我分配的变量必须按顺序放在内存中 . 一个接一个,为了填补整个分配的内存 .
例如,我在内存中分配一个区域(4096字节),这个区域已准备好供我进一步使用 . 从现在开始,每次我的应用程序在内存中创建一个新变量(可能是在"regular"应用程序中使用 malloc )时,此变量将被放置在我的内存区域的可用空间中 .
这种顺序内存分配类似于数组分配的工作方式 . 但是,就我而言,我需要一个能够包含许多类型数据(string,byte,int,...)的数组 .
一种可能的解决方案是通过指针算术来实现这一点 . 我想避免这种方法,这可能会在我的应用程序中插入很多错误 .
也许有人之前解决了这个问题?
谢谢!
1 回答
malloc()
绝不保证后续分配的块在顺序存储器地址上 . 更糟糕的是,大多数实现在'housekeeping'的分配块之前和/或之后使用少量字节 . 这意味着,即使你're lucky that addresses are sequential, there will be small gaps in between the blocks. So the actual allocated blocks are slightly bigger to make space for those '管家'字节 .正如您所建议的那样,您需要自己编写一些代码并使用
malloc()
,realloc()
编写一些函数,......您可以隐藏这些函数中的所有逻辑,并且与使用相比,不应该使用这些函数使应用程序代码更复杂malloc()
如果它做了你想要的 .重要问题:为什么需要将这些块彼此相邻?那么解冻块怎么样?