。。。
计算机常用部件
CPU、主板、内存、硬盘、显卡、声卡、机箱、电源、显示器、键盘、鼠标、音箱、摄像头、打印机。
下面简单说明一下带下划线的设备:
CPU:控制主板上各部件之间的工作,做加减乘除运算,存储运算结果。
主板:各部件通过它来交换数据
内存:临时存储数据,速度快,断电数据丢失,容量小,Windows XP时代约4G,C语言变量操作专用。
硬盘:永久存储数据,速度慢,断电数据不丢失,容量大,Windows XP时代达到1T,C语言文件操作专用。
显卡:掌管显示屏上显示的文字、图形、颜色、分辨率等等。
程序执行流程
int a,b,c;
scanf(“%d%d”,&a,&b);
c=a+b;
printf(“%d\n”,c);
int a,b,c;
CPU控制在内存中分配a、b、c这3个变量空间
scanf(“%d%d”,&a,&b);
CPU控制从键盘读入数据到内存
c=a+b;
CPU从内存a、b取出数据,在CPU内部将a、b相加后放回内存c
printf(“%d\n”,c);
CPU控制内存c中数据送至显卡,显卡控制显示器如何显示。
地址
电脑管理内存的方式是给每个存储单元编号(地址),在32位系统中可以编232=4G个号,所以32位系统最大只能装4G内存。
如果是64位系统,理论上可安装264≈0.18*1020内存,相当于无限。
内存计算
※前面我们学习了一个int型变量占4字节内存,那一个整型数组呢?
同理,5个元素的double类型数组呢?
程序1
数组与内存关系
// 13-1数组与内存的关系 #include <stdio.h> main() { int a[3]; int b[] = {1,2,3,4}; double c[5]; float d[2]; printf("%d,%d,%d,%d\n", sizeof(a), sizeof(b), sizeof(c), sizeof(d)); //查询数组内存占用的字节 printf("%d\n", sizeof(int), sizeof(double)); //也可以用 sizeof 函数直接查看类型所占的内存 }
※下面这个是我们熟悉的一个结构。你认为它会占用多少内存?
struct student
{
char name[20]; /*姓名*/
char sex[3]; /*性别*/
int age; /*年龄*/
};
程序2
结构与内存关系
注意:结构的内存计算与#pragma pack(1)这句话息息相关。
// 13-2结构体与内存的关系 // #include <stdio.h> #pragma pack(1) //字节对齐,若不写此命令输出的内存值不正确 main() { struct student { char name[20]; //姓名 char sex[3]; //性别 int age; //年龄 }; printf("%d\n", sizeof(struct student)); }
程序3
联合与内存关系
// 13-3联合与内存的关系 // #include <stdio.h> #pragma pack(1) //字节对齐 union student { char name[20]; //姓名 char sex[3]; //性别 int age; }; int main() { printf("%d\n",sizeof(union student)); //联合是属于单选,只选择最大的内存 }