首页 文章

顺序内存分配

提问于
浏览
1

我正在计划一个在内存中分配大量变量的应用程序 . 与另一个“常规”应用程序不同,我希望将此内存分配给4096字节的特定内存块 . 我分配的变量必须按顺序放在内存中 . 一个接一个,为了填补整个分配的内存 .

例如,我在内存中分配一个区域(4096字节),这个区域已准备好供我进一步使用 . 从现在开始,每次我的应用程序在内存中创建一个新变量(可能是在"regular"应用程序中使用 malloc )时,此变量将被放置在我的内存区域的可用空间中 .

这种顺序内存分配类似于数组分配的工作方式 . 但是,就我而言,我需要一个能够包含许多类型数据(string,byte,int,...)的数组 .

一种可能的解决方案是通过指针算术来实现这一点 . 我想避免这种方法,这可能会在我的应用程序中插入很多错误 .

也许有人之前解决了这个问题?

谢谢!

1 回答

  • 0

    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() 如果它做了你想要的 .

    重要问题:为什么需要将这些块彼此相邻?那么解冻块怎么样?

相关问题