<font color="blue"><strong>DRAM和SRAM的区别</strong></font>
两者都是随机存取器的一种,上电数据保持,掉电数据消失,不同的是,DRAM需要周期性的更新,SRAM不需要。
<font color="blue"><strong>CPU数据总线、地址总线、位数与内存大小的关系</strong></font>
cpu的位数是指数据总线的位数,一般来说cpu的数据总线与地址总线相同,cpu的寻址范围为2exp(地址总线数),如32位cpu代表有32根数据总线,32根地址总线,则寻址范围为2exp32=4G,故32位cpu对应内存最大为4G,64位cpu为16G。
<font color="blue"><strong>位和字节</strong></font>
内存单元的大小单位:位(1bit),字节(8bit)。特别注意,字、半字、双字这些单位具体有多少位是依赖于平台的定义,没有通用的定义。
<font color="blue"><strong>内存编址</strong></font>
内存单元包含地址和空间,一个内存地址对应的空间是固定的,为一个字节(8bit),这也是字节的起源。
<font color="blue"><strong>内存对齐</strong></font>
分配硬件上连续的内存为对齐访问,否则为非对齐访问,对齐访问效率更高。
<font color="blue"><strong>C语言中数据类型、函数名的本质</strong></font>
数据类型代表占内存单元的数量和解析方式,函数名代表一段代码的内存首地址。
<font color="blue"><strong>C语言中数据类型的强制转换</strong></font>
本质上是改变该变量的内存单元数量以及解析方式,内存单元中保存的bit信息不变。
<font color="blue"><strong>C语言指针变量和普通变量</strong></font>
两者区别只在于普通变量保存数值,指针变量保存地址,如:
int *a; //假如编译器分配变量a的内存地址0x00000000
表示0x00000000开始的4字节中存储了1个地址,该地址往后的4个字节中存储着int类型的整数,第一个4字节表示内存地址的大小,第二个4字节表示int类型的大小。
<font color="blue"><strong>C语言结构体内嵌指针实现面向对象</strong></font>
struct node
{
int var; //普通变量
void (*pFunc)(void); //函数指针
}
<font color="blue"><strong>C语言堆内存与栈内存</strong></font>
栈内存:自动申请、自动释放;内存空间反复使用,需要初始化;栈内存有上限,容易溢出,适用于局部变量;
堆内存:手动申请、手动释放;不释放使用完毕的内存会造成内存泄露,程序崩溃;内存空间大,适用于存储大量数据。
来源:<a href="https://www.cnblogs.com/sakurapiggy/p/13021157.html">博客园 - 樱花小猪</a>