C++PrimerPlus学习笔记(Ch9内存模型)

1.头文件:

包括函数原型、使用#define或const定义的符号常量、结构声明、类声明、模板声明、内联函数。

在包含自己的头文件时,文件名包含在双引号内“coordin.h”,这样编译器首先查找当前的工作目录或源代码目录。如果文件名包含在<>内,编译器首先查找当前的工作目录或源代码目录。

2.作用域:局部变量、全局变量

3.链接性:链接性为外部可以在文件间共享、链接性为内部只能在一个文件中的函数共享。

自动变量无链接性不能共享。

4.存储数据方案:

1)自动存储持续性:函数定义中声明的变量,开始执行所属代码块的时候被创建、执行完毕后被释放。

2)静态存储持续性:函数定义外定义的变量、使用static关键字定义的变量。

3)动态存储持续性:使用new分配,使用delete释放。

4.1.自动存储持续性:

默认在函数中声明的函数参数和变量存储持续性为自动,作用域为局部,无链接性。

同名变量就近原则,新的定义隐藏以前的定义,新的定义可见。

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

4.2.静态持续变量:

外部链接性(可在其他文件中访问):在代码块外部声明;

内部连接性(只能在当前文件中访问):在代码块外部声明,并使用static限定符;

无链接性(只能在当前函数或代码块中访问):在代码块内部声明,并使用static。

4.2.1.静态存储持续性 外部链接性:

在代码块外部声明。

在多个文件中使用外部变量时,只需要在一个文件中定义,但在使用该变量的其他文件中必须使用关键字external声明它。引用声明使用关键字extern不进行初始化。

作用域解析运算符:: 放在变量前面,表示使用变量的全局版本。

4.2.2.静态存储持续性 内部连接性:

在代码块外部声明,并使用static限定符。

在多文件程序中,外部变量只能在一个文件中定义,使用该变量的其他文件必须使用关键字extern声明。如果要在一个文件中定义一个变量,其与另一个文件中声明的常规外部变量名称相同,可以定义一个静态外部变量,在该文件中静态变量将隐藏常规外部变量。

4.2.3.静态存储持续性 无链接性

在代码块内部声明,并使用static。

在代码块执行结束时该变量仍存在,静态局部变量仅初始化一次。

4.3.存储方案 动态分配

使用C++运算符new分配的内存称为动态内存,由new和delete控制,不由作用域和链接性规则控制。可以在一个函数中分配动态内存,而在另一个函数中释放。

4.3.1.使用new初始化

初始化内置标量类型如int、double:类型名后加初始值,并用()括起来。

int *pi = new int(6);

double *pd = new double(10.01);

初始化常规结构体和数组,使用{}的列表初始化(C++11)

struct CUB {double x; int y; char z};

CUB *cub = new CUB{1.2,3,‘z’};

int *arr = new int[4]{1,5,7,10};

4.3.2.定位new运算符

常规new:内存空间地址不是人为指定的,而是由系统分配的。

定位new:指定要是用的位置。需要包含头文件new

#include <new>

char buffer[500];        // 数组名即为地址

p4 = new(buffer) int[20];        //指定在buffer存储空间地址内,以buffer开始开辟20个能连续存放int类型的地址空间并让p4指向它。

打印出数组地址: cout << (void*)buffer

注:不能使用delete来释放定位new分配的内存,因为buffer指定内存是静态内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值