当一个人宣布
时int my_number = 300;
编译器分配足够的内存来存储1个整数,并在该空间中写入300的位表示。
当一个而不是
#define MY_NUMBER 300
每当提到MY_NUMBER
时,就会将值替换为300.
我理解符号常量不是变量,并且想知道从内存分配的角度来看会发生什么?在使用符号常量的情况下,使用了多少内存来跟踪它?
答案 0 :(得分:3)
零。 #define
- d常量不是实常数:它没有类型,也不占用数据内存。它在你的程序中的出现被文字300
取代,这就是全部。常量值确实占用程序二进制代码中的程序内存,但它不是那种可以在没有进入未定义行为区域的情况下使用指针的内存。
答案 1 :(得分:1)
有点取决于机械,编译器和可能的优化。 300可能会以一些只读部分结束。它可能是.text,(代码)中的立即操作数或.rdata(常量数据)部分中的值。在一些具有速度优化的嵌入式系统上,它甚至可以在启动时从ROM复制到RAM部分,在那里访问速度更快。
通常,每次使用它都是机器宽度的单词值。
本质上,内存空间在编译时分配,并构成可执行映像的一部分。