Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c+中存储常量数据的内存+; 在C++完全引用中提到的,常量数据存储在ROM.中,但局部变量存储在栈中,在RAM中。如果我们声明局部常量数据,它存储在哪里?RAM或ROM?_C++_Constants_Local Variables - Fatal编程技术网

在c+中存储常量数据的内存+; 在C++完全引用中提到的,常量数据存储在ROM.中,但局部变量存储在栈中,在RAM中。如果我们声明局部常量数据,它存储在哪里?RAM或ROM?

在c+中存储常量数据的内存+; 在C++完全引用中提到的,常量数据存储在ROM.中,但局部变量存储在栈中,在RAM中。如果我们声明局部常量数据,它存储在哪里?RAM或ROM?,c++,constants,local-variables,C++,Constants,Local Variables,术语“ROM”通常用于物理上无法写入的硬件。常量仍然放在物理上的“RAM”中(否则,您的程序怎么可能加载?) 从技术上讲,没有什么保护措施可以防止在规范中写入内容……只是如果您这样做的话 至于存储内容的位置,在当前的体系结构上有一些典型的实践。但是编译器可以自由地做出自己的决定。例如,请参见: 运行时存储在堆栈上的本地常量数据。静态本地和全局数据通常在编译时存储在只读段中。然而,编译器可以进行一些优化,甚至可以在只读段中存储局部常量。唯一正确的可能答案是“这取决于它” C++是硬件之上的一个抽象

术语“ROM”通常用于物理上无法写入的硬件。常量仍然放在物理上的“RAM”中(否则,您的程序怎么可能加载?)

从技术上讲,没有什么保护措施可以防止在规范中写入内容……只是如果您这样做的话

至于存储内容的位置,在当前的体系结构上有一些典型的实践。但是编译器可以自由地做出自己的决定。例如,请参见:


运行时存储在堆栈上的本地常量数据。静态本地和全局数据通常在编译时存储在只读段中。然而,编译器可以进行一些优化,甚至可以在只读段中存储局部常量。

唯一正确的可能答案是“这取决于它”

C++是硬件之上的一个抽象级别,它生成的代码可能由其他软件(如操作系统)“托管”

它使用硬件的方式取决于硬件本身是什么,它的工作方式和管理方式,以及编译器设计者打算如何使用这些优点

常量和变量之间的区别在于(由语言设计器)将变量设计为修改并保留其值,而常量设计为从不修改

<> P>关于常数的C++唯一的一点是,试图修改它们会导致“未定义的行为”:即“语言设计者对什么可能发生的事情什么也不说”。p> 编译器设计人员尽其所能与他们工作的平台兼容。有些常量存储在真实的ROM中(想想micro控制器),有些存储在RAM中,“写访问被拒绝”(因此,如果您试图修改它们,就会生成一个硬件陷阱:发生什么取决于操作系统:通常陷阱被翻译成操作系统异常,该语言可能支持也可能不支持),有些只是存储在RAM中,没有这样的“设施”存在,有些甚至在机器代码指令本身内部

在任何情况下,除非您自己编程硬件,否则您不应该关心这些细节。
“常量可以放入ROM”可能是真的(如果平台允许的话),但“常量存储在ROM中”只是一个谎言。

不是RAM或ROM。应该是数据段和只读段。这是完全由实现定义的。您不必担心它们的确切存储位置。您应该理解的是常量正确性契约,并严格遵守它。正如我所知,常量变量永远不会存储在datasegment中。如果我错了,请更正。@Als-与其说是定义为依赖于实施的实现,不如说是定义为依赖于实现的实现。语言定义对特定需求使用“实现定义”:实现必须记录它们对实现定义的内容所做的操作。在形式上,存储策略未指定。