1. RAM
RAM,随机存取寄存器,random-access memory。
2. 位、字节、字
位 —— bit。
字节 —— byte。由8个位构成,并且足以存储一个char类型的数据。
字 —— word。一个字通常可以存储一个int类型的数据。今天,大多数机器要么使用四字节的字(32位),要么使用八字节的字(64位)。
kilo(K)、mega(M)、giga(G)。 kilobytes:KB,megabytes:MB,gigabytes:GB。
3. 内存地址
计算机内存中每一个字节都由一个数字地地址所标识(zhi)。计算机的第一个字节编址位0,第二个为1,以此类推。
4. 静态区、栈区、堆区
静态区用于程序源代码和全局变量的存储。该区域位于地址编号较小的接近机器地址空间的起始处。该区域所分配的内存量在程序运行期间不会发生改变。
内存中的最高地址区表示栈区。用于存储由函数和方法调用所产生的栈帧中的临时变量。
处于栈区和静态区之间的内存区域被称为堆区。该区域会在程序运行时请求更多的内存的时候发挥作用。
5. 指针的用途
指针允许以一种压缩的方式引用一个大的数据结构。一个程序中的数据结构可以变得任意大。指针允许你以它的地址作为这个数据结构所表示的值得一个缩写。由于一个内存地址一般占用四个字节的存储空间。因此,数据结构很大时,这个策略节省了很大的空间。
指针使得在程序运行时能够预定新的内存。
指针可以用来记录数据线之间的关系。如链表。
6. 指针和引用调用
C++内部通过使用指针来实现引用调用。当一个参数通过引用传递时,栈帧会在调用时存储一个指针指向该值的内存单元。该值得任何改变都会影响指针的目标数据,这也意味着这些改变知道函数返回一直有效。
7. 数组的缺点
数组被分配为固定大小的内存,之后不能改变。
尽管数组有固定大小的内存,C++语言并没有使其容量对程序员可用。需要一个额外的变量来追踪元素的个数。
数组不支持插入和删除元素。
C++没有提供边界检查来确保选择的元素存在于数组中。
动态内存管理
1. 静态分配
当你声明一个全局常量或者变量,编译器会给这个全局常量在整个程序生命周期内分配一块持久的内存空间。这种模式被称为静态分配,因为变量在整个程序生命周期中被分配到固定的内存地址。
2. 自动分配
当你在一个函数中声明一个变量时,在变量的存储空间被分配到栈中。在调用该函数时,将为该变量分配存储空间;当函数返回时,该变量所占用的空间就会被自动释放。
3. 动态分配
当程序运行时,允许你获得新的内存空间。
4. 堆
所有集合类用堆存储它们的元素,因为动态分配对于构建数据结构,使其依照需求扩展来说是必不可少的。
5. 析构函数
析构函数最重要的一个作用是释放对象所创建的所有堆内存。