0

标题不是很清楚,会延伸很多,但我在特定的上下文中询问 - 没有执行用户显式内存重新分配。块只分配一次,没有附加或任何东西,问题是,它的地址会保持不变吗?

我问的原因是我正在考虑对 VM 进行小优化,当第一次分配全局数据时,对函数的初始调用存储为基指针的偏移量,但第一次执行时,值被缓存并且指令改为直接调用,每次都省去多余的计算。因此,这些数据需要持久化才能使优化工作。

4

2 回答 2

2

是的,否则指针将毫无用处,并且您需要锁定/解锁机制才能使用它们(例如在 C# 中存在fixed使对象不可移动的关键字)

于 2013-08-11T13:18:37.533 回答
1

地址不会改变。一旦您从内存池中请求了一块内存,您就可以使用它了——操作系统不会再触摸它,直到您使用free它。

如果你看realloc,这是一个有趣的功能。如果地址可用,它可以将一块内存“附加”到您现有的内存块 - 否则它将找到一个全新的内存块 size sreallocing之后的内存块并不总是保证相同。

备注:如果你malloc有一个大小的内存块sfree如果你使用malloc另一个相同大小的块,则不能保证获得相同的内存块s

于 2013-08-11T13:21:01.523 回答