网站正能量晚上免费网址不用下载,建材网中国建材第一网,网址搜索,旅游网站的功能一、关于内存
存储器#xff1a;存储数据器件
外存
外存又叫外部存储器#xff0c;长期存放数据#xff0c;掉电不丢失数据
常见的外存设备#xff1a;硬盘、flash、rom、u盘、光盘、磁带
内存
内存又叫内部存储器#xff0c;暂时存放数据#xff0c;掉电数据…一、关于内存
存储器存储数据器件
外存
外存又叫外部存储器长期存放数据掉电不丢失数据
常见的外存设备硬盘、flash、rom、u盘、光盘、磁带
内存
内存又叫内部存储器暂时存放数据掉电数据丢失
常见的内存设备ram、DDR
物理内存实实在在存在的存储设备
虚拟内存操作系统虚拟出来的内存当一个进程被创建的时候或者程序运行的时候都会分配虚拟内存虚拟内存和物理内存之间存在映射关系。
操作系统会在物理内存和虚拟内存之间做映射。
在32位系统下每个进程运行着的程序的寻址范围是4G,0x00 00 00 00 ~0xff ff ff ff
其中有3G是用户空间有1G是内核空间。
在写应用程序的咱们看到的都是虚拟地址。
在运行程序的时候操作系统会将 虚拟内存进行分区。
1.堆
在动态申请内存的时候在堆里开辟内存。
2.栈
主要存放局部变量在函数内部或复合语句内部定义的变量。
3.静态全局区
1未初始化的静态全局区
静态变量定义的时候前面加static修饰或全局变量 没有初始化的存在此区 。
2初始化的静态全局区
全局变量、静态变量赋过初值的存放在此区
4.代码区
存放咱们的程序代码
5.文字常量区
存放常量的。
内存以字节为单位来存储数据的咱们可以将程序中的虚拟寻址空间看成一个很大的一维的字符数组
本章所接触的内容涉及到的内存都是虚拟内存更准确来说是虚拟内存的用户空间
二、指针的相关概念
操作系统给每个存储单元分配了一个编号从0x00 00 00 00 ~0xff ff ff ff
这个编号咱们称之为地址
指针就是地址 指针变量是个变量是个指针变量即这个变量用来存放一个地址编号
在32位平台下地址总线是32位的所以地址是32位编号所以指针变量是32位的即4个字节。
注意
1无论什么类型的地址都是存储单元的编号在32位平台下都是4个字节。
即任何类型的指针变量都是4个字节大小
2对应类型的指针变量只能存放对应类型的变量的地址
举例整型的指针变量只能存放整型变量的地址
扩展
字符变量 char ch; ch占1个字节它有一个地址编号这个地址编号就是ch的地址。整型变量 int a; a占4个字节它占有4个字节的存储单元有4个地址编号。
Int a0x00 00 23 4f Int a0x00 00 23 4f
三、指针的定义方法
1.简单的指针
数据类型 * 指针变量名;
int * p;//定义了一个指针变量p
在 定义指针变量的时候 * 是用来修饰变量的说明变量p是个指针变量。
变量名是 p
2.关于指针的运算符 取地址 、 *取值获取一个变量的地址
*在定义一个指针变量时起到标识作用标识定义的是一个指针变量。除此之外其他地方都表示获取一个指针变量保存的地址里面的内容。 1 #include stdio.h
2
3 int main(int argc, char *argv[])
4 {
5 //定义一个普通变量
6 int a 100;
7 //定义一个指针变量
8 int *p;
9
10 //给指针变量赋值
11 //将a的地址保存在p中
12 p a;
13
14 printf(a %d %d\n, a, *p);
15 printf(a %p %p\n, a, p);
16
17 return 0;
18 } 扩展如果在一行中定义多个指针变量每个指针变量前面都需要加*来修饰
int *p,*q;//定义了两个整型的指针变量p和q
int * p,q;//定义了一个整型指针变量p和整型的变量q
3、指针大小
在32位系统下所有类型的指针都是4个字节
因为不管地址内的空间多大但是地址编号的长度是一样的所以在32位操作系统中地址都是四个字节
1 #include stdio.h
2
3 int main(int argc, char *argv[])
4 {
5 char *a;
6 short *b;
7 int *c;
8 long *d;
9 float *e;
10 double *f;
11
12 printf(sizeof(a) %d\n, sizeof(a));
13 printf(sizeof(b) %d\n, sizeof(b));
14 printf(sizeof(c) %d\n, sizeof(c));
15 printf(sizeof(d) %d\n, sizeof(d));
16 printf(sizeof(e) %d\n, sizeof(e));
17 printf(sizeof(f) %d\n, sizeof(f));
18
19 return 0;
20 }
21