内存
1.简述对内存单元以及内存编号的了解.
答:内存的存储是以一个字节为一个编号,也就是8位合在一起给一个编号,不是一个位给一个编号;内存单元的编号是32位的;内存分为很多个单元,每个单元就会有一个编号.简单来说:一个字节占8位,一个字节的编号占32位.
2.简述CPU与内存之间的关系.
CPU对内存是通过控制,数据,地址三条总线来进行控制的:
控制线:CPU会先把内存中的数据读入,进行处理后,再将数据返回给内存条,然后内存再将数据写入硬盘.
数据线:用于数据的传输,不管是内存中的数据发送给CPU,还是把CPU中的数据写入内存条,都是由数据线来完成的,但是数据传输的方向则是由控制线来进行控制的.
地址线:地址线则是确定数据写入内存中的哪个单元,所谓的一个单元就是一个字节.
3.简述分配内存与释放内存的概念.
分配内存:操作系统将某一块内存空间的使用权限分配给某一程序.
释放内存:操作系统将分配给某一程序的内存空间的使用权限收回,则该程序不能使用这块内存空间.
4.简述自己对于内存空间使用权限的理解
操作系统为一个程序分配几块内存,则这个程序只能使用哪几块内存空间.不能越界,不能访问,读与写都不行;当操作系统为变量分配好内存空间以后,则该变量的地址不会再发生变化[但是储存的变量的内容可以发生变化以供使用],直到该变量的内存空间的使用权限被收回
5.简述静态变量与动态变量的异同
相同点:都需要分配内存
不同点:静态变量的内存空间由操作系统自由分配,自由释放,静态分配的内存只要所在的函数不终止,则它所占的空间一直有;不能由程序员进行分配,进行释放
静态变量的内存空间是在栈中进行分配的,直到该变量所在的函数运行终止,该变量所占用的内存空间才会被系统自动释放;动态变量的内存空间是由程序员自由分配,自由释放,动态变量的内存空间是在堆中进行分配的,不需要该变量所在的函数运行终止,动态变量的内存空间可以在程序执行的过程当中由程序员进行自由分配,自由释放
6.简述对int *p=(int *)malloc(100)所传达出的6个信息
①要使用malloc函数,必须要添加malloc.h头文件
②malloc函数只有一个形式参数,并且该形式参数是整型变量
③100表示请求操作系统为本程序分配100个字节的内存空间,如果请求分配成功,则返回第一个字节的地址,如果分配不成功,则返回null
④malloc函数只能返回第一个字节的地址,但此时并不能确定该内存空间储存变量的类型,只有将这个地址被强制转化成整型变量的地址,这时才传达出该内存空间存放整型变量的信息
⑤指针变量p本身的内存空间是静态分配的,但是p所指向的内存空间却是动态分配的
⑥free(p)表示把p所指向的内存空间给释放掉,但是p变量本身的内存空间却没有释放掉,直到p变量所在的函数运行终止时由操作系统进行释放
7.如何区分内存是静态分配的还是动态分配的
凡是数据类型+变量名都是静态分配的内存(栈区),凡是用malloc函数都是动态分配的(堆区)
8.动态内存和静态内存的比较
静态内存是由系统自动分配,由系统自动释放,静态内存是在栈中进行分配的。
动态内存是由程序员手动分配,手动释放,动态内存是在堆中进行分配的。
动态分配的内存必须调用free()函数才能释放,而静态分配的内存一旦跳出它的代码的作用范围,就会由编译器自动释放掉。