malloc内存分配笔记

首先需要了解的基础知识,也是非常重要的内容,就是C所定义的数据类型了。

通常计算机存储的最小单位是字节(Byte),一个字节是8个bit。数据类型做占用的字节数遵循ILP32或LP64规范,如下表所示。x86/Linux/gcc,遵循ILP32,并且char是有符号的。

类型 ILP32(位数) LP64(位数)
char 8 8
short 16 16
int 32 32
long 32 64
long long 64 64
指针 32 64

当我们使用char *p=(char *)malloc(sizeof(char))开辟内存空间时,我们就获得了1个字节的存储空间,指针p指向该块内存首地址。需要注意的是内存中的地址最小单位就是字节,而不是位,所以这个在这个特例中我们不能移动p,比如企图向p+1的地址空间写数据,可能引起崩溃。 查看了malloc后发现其实malloc分配的地址空间通常比我们要求的要大一些,所以可能p+1的位置还是能写数据,我尝试到p+4后调用free(p)会崩溃。

同样,int *p=(int *)malloc(4*sizeof(int)),即申请了4*4=16个字节,每个整形占用4字节,p就可以保存4个整形数据,可以使用下标或者指针移动来访问这4个格子了。

同样的我们可以申请更大的内存,需要注意的就是读写数据千万在申请的范围内了,用完后调用free()将内存还给操作系统。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章