gpt4 book ai didi

c++ - 本地和其他变量类型的地址存储在哪里?

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:50 25 4
gpt4 key购买 nike

有人问我这个问题,我不太确定答案。我知道局部变量的值(内容)在栈上,分配在堆上(C/C++语言)。但是:

1- 这些局部变量的地址存储在哪里?程序如何知道应该在堆栈的哪个位置查找每个局部变量?这些引用(每个变量的地址)是否保存在数据段中?其他变量类型(全局,指针,...)的地址如何

2- 在处理局部变量时,程序直接(不使用 pop/push)读取/写入堆栈段中的不同地址是否正确?

最佳答案

  1. 编译器将跟踪每个参数和局部变量相对于堆栈顶部的位置。并且如果可能的话,编译器会为“重要的”变量(比如循环计数器)使用寄存器——它会使用每个变量被使用多少次的统计数据来查看哪些是“热的”(使用很多),哪些是“冷”(用得不多)。

    请注意,“局部变量的地址”并不总是适用。寄存器没有(直接)地址[TI TMS9900 处理器和其他一些处理器除外,其中寄存器和内存的界限略微模糊]。

    编译器会知道每个东西在哪里——这是编译器所做的——就像它知道哪个变量存储在数据部分的什么地方一样。具体如何做到这一点是一本小书的主题。现在,只需相信编译器会这样做。

  2. 是的,当今几乎所有处理器都允许从堆栈 + 偏移量读取和写入(其中偏移量通常为负,因此在堆栈的下方,因为堆栈通常向零增长)。

    虽然堆栈有时算作“数据段”,但在现代机器上它通常是自己的内存部分 - 如果您有多个线程,每个线程都会有自己的堆栈。

关于c++ - 本地和其他变量类型的地址存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35548006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com