发现了一个知识盲点。当我用malloc
申请很大一段内存(100000 * sizeof(int)
)的时候,返回一个0x229feb0
地址,看大小应该是处于 heap 区,很合理。但是当我用realloc
重新修改大小为 100001 后,居然返回了0x7f6317307010
,看大小好像是处于 stack 区?
同时我发现,如果malloc
只申请一小段内存(比如 100 个int
大小),再用realloc
修改为 101 个int
大小,则不会出现这个问题。返回的地址都似乎是处于 heap (0x2394ef0
和0x2393eb0
)。
请问这可能是什么缘故呢?我看了下汇编代码似乎除了数字之外其余都一样。
示例代码:
int
https://godbolt.org/z/93PoWWdcbint
https://godbolt.org/z/8oYG3s8Mc这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.