内存那点儿事儿(一)

 一、Linux分配给进程中的地址空间:

  • 代码段

存储程序文本,又称文本段,指令指针从这里获得指令,可以被共享。

  • 数据段

用来存储数据。分为初始化为非0的数据区,BBS(Block Started by Symbol 用来存放未初始化的全局数据和静态数据) 和堆(Heap 用来动态分配内存,就是说malloc等函数可以在这里或的分配内存,地址是向上增长的)

  • 堆栈段

(Stack),堆栈里存放局部变量、各个函数的参数、返回地址以及临时变量,地址是向下增长。

高地址

堆栈段

程序栈(向下增长)

数据段

BBS

非零数据

 

低地址

代码

代码段

动态内存空间:

在堆中分配,实现动态分配的函数有:

stdlib.h:

void *malloc(size_t size); 分配一个size大小的内存空间,返回一个void类型的指向该空间的指针。

void calloc(size_t nmemb,size_t size);calloc分配的空间大小=nmemb * size,其余与malloc相同。

void realloc(void *ptr,size_t size);用来重新分配size大小的空间,改变已经分配的空间大小,返回一个指向新空间的指针。

void free(void *ptr);用来释放以上3个函数分配的空间。

二、内存分配

内存分配方式:

  • 从静态存储区域里

内存在程序编译的时候就已经分配好了,在程序的运行期间,这块内存都是存在的。

Eg:全局变量,static变量

  • 在栈上

在执行函数的时候,函数里的局部变量的存储单元可以在栈上创建,函数执行结束的时候,这些存储单元就会自动被释 放。对于栈内存分配运算来说,它们是已经在处理器指令集中的,效率高,但是分配内存容量还是有限的。

  • 从堆上

在堆上分配内存幼教动态内存分配。Eg:malloc和free,new和delete,动态内存的生存期是由我们决定的。

在使用动态内存的时候有注意5点:

  •   用malloc或new申请内存后,需要检查指针值是否为null,不要访问空指针的内存(这是块禁区,~~~~(>_<)~~~~ )
  •   记得给数组和动态内存赋初值
  •   表让数组或者指针越界
  •   申请内存与释放内存要一一对应
  •   free或delete后,需要将指针设为空指针null。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值