当我使用调试器找出变量的内存地址时, 我得到像0x602010或0x7fffffffe0d8。
一个属于堆内存,另一个属于堆栈内存。
第一个是来自堆的内存地址,后者是来自堆栈内存。 我知道这一点,因为第一个是malloc()的地址,第二个是局部变量的内存地址。
我很想知道是否有办法知道某个地址是仅仅通过查看其内存地址而属于堆栈还是堆。
答案 0 :(得分:4)
一般情况下?否。
并非每个实现都有堆,或者malloc()
使用了一个堆。并非每个局部变量都在"堆栈上#34;。这些是很难实现的细节。
使用特定系统的文档可能会确定一个规则集来满足您的目标,但是由于您使用C ++进行编程,因此根本不执行此操作会更好 。相反,请关注程序的高级语义。让编译器和实现来处理其余的事情;的确,这是他们的工作。