C中常量需要多少内存?

12 c const

这样做的时候:

const int a = 5;
Run Code Online (Sandbox Code Playgroud)

我想知道是否会像变量那样得到4字节的内存?(在32位系统中)

jco*_*der 15

是的,它会的.虽然如果你从不接受它的地址,那么优化器可能会完全删除它,并在你的情况下用数字5替换对常量的任何引用.

  • C中的常量对象默认具有外部链接.这就是为什么优化器很难删除它们的原因:它们必须从目标文件中导出.只有更高级的全局优化器才能做到这一点,所以如果不删除它也不要感到惊讶.在C中,如果你想要一个"可移动"常量,你必须明确地声明它是`static`. (12认同)

Kel*_*nch 2

这取决于编译器。

例如:

const int a = 4;
Run Code Online (Sandbox Code Playgroud)

这可以通过编译器分配 4 个字节并仅强制执行不变性来处理。

如果你有一个常量字符串:

static final java.lang.String name = "Foobar";
Run Code Online (Sandbox Code Playgroud)

编译器可以删除该变量,并将其替换为使用该变量的实际字符串“Foobar”。这不会占用堆空间,但它仍然必须存储在程序数据段中的某个位置。当 Java 发现在多个地方使用的带引号的字符串时,它会尝试执行此操作,因此它只需存储该字符串的一份副本。

无论哪种方式,常量都不会消除存储分配。他们充其量只能最大限度地减少所需的存储空间。