gpt4 book ai didi

c++ - 除了内容(例如类型、位置)之外,变量是否还消耗内存?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:19 25 4
gpt4 key购买 nike

很可能之前已经有人问过/回答过这个问题,但不确定如何用最好的措词来表达它,如果有一个指向以前回答过的问题的链接会很好。

如果你定义类似的东西

char myChar = 'a';

我知道这将占用内存中的一个字节(取决于实现并假设没有 unicode 等,实际数字并不重要)。

但我假设编译器/计算机还需要保留一个变量类型、地址(即指针)和可能更多的表。否则它会保留内存,但不能用它做任何事情。因此,每个变量至少已经消耗了几个字节的内存。

这是对发生的事情的正确描述,还是我误解了程序编译/执行时发生的事情?如果以上是正确的,那么它更多地与编译有关,还是与执行有关?

最佳答案

编译器 将跟踪变量的属性 - 它的名称、生命周期、类型、范围等。此信息仅在编译期间存在于内存中。然而,一旦程序被编译并执行,剩下的就是对象本身。在运行时没有类型信息(除非您使用 RTTI ,否则会有一些,但这只是因为您需要它才能让您的程序运行 - 例如 dynamic_casting ).

访问对象的代码中发生的所有事情都被编译成一种形式,将其完全视为单个字节(因为它是一个char)。对象所在的地址无论如何只能在运行时知道。然而,具有自动存储持续时间的变量(如局部变量)通常仅通过当前堆栈帧的一些固定偏移量定位。该偏移量被硬烘焙到可执行文件中。

关于c++ - 除了内容(例如类型、位置)之外,变量是否还消耗内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20883566/

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