EXE File英文全名executable(a.可执行的) file
bss区:block started by symbol,以符号开始的块
heap segment(段):堆
栈区存储数据,在内存中,从高地址存向低地址
数组例外,在高地址一端开辟空间后,arr[0]-arr[n]从低地址往高地址存储
函数参数,从右往左加载入栈,先入栈的右端参数,先存入高地址
加载:表示启动程序时文件或信息的载入。
如何避免野指针的出现:在free(p)后,令p=NULL,避免后面乱使用野指针
C语言中,实数类型=浮点数类型
-malloc:memory allocation(n.分配),动态内存分配
-void *calloc(unsigned int num,unsigned int size):(contiguous(连续的) memory allocation)
num(对象个数),size(对象占据的内存字节数)
在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
相较于malloc函数,calloc函数会自动将内存初始化为0。而malloc不做初始化,分配到空间中的数据是随机数据。
-void *realloc(void *mem_address,unsigned int newsize):判断是否有足够大的连续空间,有则开辟并返回原指针;如空间不够,则另开辟一块并拷贝,而后释放之前指针所指的内存区域,并返回新指针
注意事项:
1. 乱free()会造成内存泄露。
2. newsize小于原先的大小的时候,可能会造成数据丢失。
4. 如果newsize大小为0,那么释放mem_address指向的内存,并返回NULL。这里需要注意的是只对指针本身进行释放,例如对二维指针**a,对a调用realloc时只会释放一维,使用时谨防内存泄漏。
5.如果没有足够可用的内存用来完成重新分配(扩大原来的内存块,或分配新的内存块),则返回NULL。而原来的内存块保持不变。
6.传递给realloc的指针可以为空,效果等同于malloc。
指针变量,++、--,改变的是指针指向的位置,向右偏移、向左偏移
memset(void *s, int c, size_t n):s需操作内存的首地址,c(0-255)每个字节都改成c,总共该n个字节。