发现了一个知识盲点。当我用malloc申请很大一段内存(100000 * sizeof(int))的时候,返回一个0x229feb0地址,看大小应该是处于 heap 区,很合理。但是当我用realloc重新修改大小为 100001 后,居然返回了0x7f6317307010,看大小好像是处于 stack 区?
同时我发现,如果malloc只申请一小段内存(比如 100 个int大小),再用realloc修改为 101 个int大小,则不会出现这个问题。返回的地址都似乎是处于 heap (0x2394ef0和0x2393eb0)。
请问这可能是什么缘故呢?我看了下汇编代码似乎除了数字之外其余都一样。
示例代码:
- 申请 100 个
inthttps://godbolt.org/z/93PoWWdcb - 申请 100000 个
inthttps://godbolt.org/z/8oYG3s8Mc