2010-10-28 51 views
5

在C++中使用const时,是什么让你无法在机器的低层隐式传递一个非const的值?机器如何确定这是const什么使const在机器的较低级别?

(除了一个事实,即const意味着这意味着什么...)

是它可能存储在内存.rdata部分还是有时设置,使得它常量位或这是如何工作的?

任何人都可以澄清?

+0

大多数情况下,什么都没有。 – 2010-10-28 11:01:13

回答

12

const主要是一个编译时的事情;它并不意味着它们可能在运行时存储在何处,或者它们是否可能在运行时受到保护。

在实践中,编译器可以选择把常数在可执行文件,它可以由存储器管理单元写保护的程序部分(如果存在)。或者,编译器可以将常量直接折叠到代码中,以使它们甚至不存在作为可寻址位置。

或者,它可能不会做任何这些事情。

8

const -ness几乎总是由编译器,仅此而已,无所不及执行。根本没有机器保护。

编辑:@Oli查尔斯沃斯的答案比我的好。

+0

值得一提的是,智能编译器在优化阶段也可以使用这些信息。 – 2010-10-28 11:07:20

1

在C++中,const,很少有什么做硬件。这主要是告诉编译器某种访问会导致编译器错误的一种方法。

唯一的例外是基本或POD类型的静态常量变量,它们通常链接到可执行映像中的只读部分,如果抛弃常量并尝试去执行,会触发某种页面错误修改其中之一。

3

“const”并不一定意味着存储是只读的。它是一个声明,C++程序不会改变它(因此编译器应该拒绝任何尝试)。这并不意味着价值不会改变。

这是相当合理的一个变量是“const volatile的”(该计划不会改变它,但它可能在任何时候改变)。例如,只读硬件端口可能就是这样一个野兽。

所以在“较低级别的机器”,没有什么需要做的事情。内存是什么,应用程序员需要正确声明内容。

相关问题