类型总是使用其大小存储在内存中吗

Does type always stored in memory using its size?

本文关键字:存储 内存 类型      更新时间:2023-10-16

可以肯定地说,基元类型的变量(如:"char"、"short"、"int"、"long"answers"long-long"(总是使用其大小存储在RAM中吗?

例如,"long-long"将使用8个字节存储,即使其值等于15。

是和否

是的,因为C++和C实际上公开了(某些(值的内存表示,并且您甚至可以使用memcpy将变量的字节安全地复制到某些类型(POD"普通旧数据"类型(中。

不,因为编译器在处理生成的代码方面有很大的自由度,例如在这样的函数中

int foo(int a, int b) {
int c = a + b;
return c;
}

最有可能的是,具有任何像样编译器的CCD_ 2根本不会被赋予任何RAM位置,而只是暂时存在于CPU寄存器中。

是的,可以肯定地说,变量存储为其数据类型大小。原因是,如果它是根据其值存储的,那么未赋值的变量将永远不存在(这是没有值的假变量,存在一些垃圾值(。

可以肯定地说,像charshortintlonglong long这样的基元类型的变量总是使用其大小存储在RAM中吗?

理论上,C++不需要RAM

由于C++11是一个用英语编写的规范(在n3337中(,而且该标准甚至没有提到RAM。我对C++11的理解是,C++实现(原则上(可以在机械计算机上运行,就像巴贝奇分析引擎的一个假设的放大变体一样,而这样的计算机没有任何DRAM模块。

在实践中,大多数处理器都会在RAM中保存一个变量,但请注意,主板的UEFI或BIOS(例如,一些华硕ROG STRIX TRX40-e(可能主要用C或C++编写,并且可以在没有DRAM模块的情况下运行(仅使用处理器CPU缓存(。还可以查看coreboot。

大多数优化编译器(例如最近的GCC,调用为g++ -Wall -Wextra -g -O3(都会努力将自动变量保存在处理器寄存器中。

例如,long long将使用8个字节存储,即使其值等于15。

很可能是的,但您应该使用标准的std::int64_t类型。

最后,大多数C++程序都在一些支持虚拟内存的操作系统的控制下运行,有时变量甚至不在RAM中(只是在某个磁盘的交换区中(。