C++ primer plus 第9章 内存模型和名称空间

C++11中,关键字auto用于自动类型推断,但在C语言和以前的C++版本中,auto的含义截然不同,它用于显式地指出变量Wie自动存储。

1.自动变量和栈

程序必须在运行时对自动变量进行管理,常用方法:留出一段内存,并将其视为栈,以管理变量的增减。程序使用两个指针来跟踪栈,一个指针指向栈底——栈的开始位置,另一个指针指向堆顶——下一个可用内存单元。函数被调用时,其自动变量将被加入到栈中,栈顶指针指向变量后面的下一个可用的内存单元,函数结束时,栈顶指针被重置为函数被调用前的值,从而释放新变量使用的内存。        栈是LIFO(后进先出)的

寄存器变量:关键字register——建议编译器使用CPU寄存器来存储自动变量,旨在提高访问变量的速度。

register int cout_fast;

但是在C++11中,关键字register只是显示的指出变量是自动的。

2.静态持续变量

C++为静态存储持续性变量提供了3中链接特性:外部链接性(可在其他文件中访问)、内部链接性(只能在当前文件中访问)和无链接性(只能在当前函数或代码块中访问),静态数目在程序运行期间是不变的,程序不需要使用特殊的装置(如栈)来管理它们。编译器将分配固定的内存块来存储所有的静态变量。

要想创建链接性为外部的静态持续变量,必须在代码块的外面声明它;要创建链接性为内部的静态持续变量,必须在代码块的外面声明它,并使用static限定符;要创建没有链接性的静态持续变量,必须在代码块内声明它,并使用static限定符。

所有的静态持续变量都有的初始化特征:未被初始化的静态变量的所有为都被设置为0。

单定义规则:在每个使用使用外部变量的文件中,都必须声明它;C++有“单定义规则”(One Definition Rule,ODR)——变量只能有一次定义。为满足这种需求,C++提供了两种变量声明。一种是定义声明——定义,它给变量分配存储空间;另一种是引用声明——声明,它不给变量分配存储空间,因为它引用已有的变量。引用声明使用关键字extern,且不进行初始化:否则,声明为定义,导致分配存储空间。

定义与全局变量同名的局部变量后,局部变量将隐藏全局变量。但如果将作用域解析运算符(::)放在变量名前,该运算符表示使用变量的全局版本。

 

你可能感兴趣的:(C++基础学习)