标题不是很清楚,会有很多延伸,但我在特定的上下文中询问 - 没有正在执行用户显式内存重新分配。块只分配一次,没有附加或任何东西,问题是,它的地址是否保持不变?
我问的原因是我正在考虑对VM进行小优化,当首次分配全局数据时,对函数的初始调用是作为基指针偏移的存储,但是第一次执行它们时,值是缓存并将指令更改为直接调用以保存每次额外的计算。因此,需要持续存储数据才能使优化工作。
答案 0 :(得分:2)
是的,否则指针将毫无用处,你需要一个锁定/解锁机制才能使用它们(比如在C#中有fixed
关键字使对象无法移动)
答案 1 :(得分:1)
地址不会改变。一旦你从内存池中请求了一块内存,你就可以玩了 - 在你free
之前,操作系统不会再次触摸它。
如果你看realloc
,这是一个有趣的功能。如果地址可用,它可以将“内存”块“附加”到现有的内存块中 - 否则它将找到一个大小为s
的全新内存块。 realloc
之后的内存块并不总是保证是相同的。
备注:如果您malloc
内存大小为s
且free
的内存,则无法保证获得相同的内存块您malloc
另一个大小相同的s
块。