Linux的内存管理和使用

Linux的内存管理和使用

如果学过算法的一般都知道内存其实很重要,打游戏的也知道。

1.堆和栈的区别
①栈:
栈是一个由编译器分配释放的区域,用来存放函数的参数、局部变量等。当调用函数时,被调用函数的参数和返回值会储存到当前程序的栈区,之后被调用的函数还会为自身的自动变量和临时变量字栈区上分配空间,当函数调用返回(函数结束),栈区内的参数返回值、自动变量和临时变量等会被释放。

这种方法是为了保证不同函数内部定义相同名字的变量不会混淆。栈的管理方式是FILO先进后出。也就是栈内数据是先到达的数据最后被读出来,就像火车总站,车头先进去,最后出来时是车尾先出来,车头最后出来。

②堆:
堆位于bss段和栈之间,用来动态分配内存。这段区域由程序员管理。堆的区域是有限制的,不能无限申请内存,一般程序退出时,内存会被释放掉。

编写程序的时候要注意,控制内存大小分配和释放,每次申请内存都要检查结果,查看是否正确分配,不然程序会爆炸。

2.内存管理函数malloc()和free()

#include <stdlib.h>
void *malloc(size_t size);
void free(void *ptr);

sizet_t的size表示的是需要分配size字节大小的内存,malloc()返回值是一个void类型的指向分配好内存的首地址,失败则返回NULL。通常可以转换为任意类型指针

int *p_pem=(int*)malloc(1024);

注意这个地址不能随便改变,不然释放内存时会报错。

free()函数使用的指针就是malloc()分配内存地址的指针,确保这个指针是正确的。

free(p_mem);

3.内存分配函数calloc()和realloc()
①calloc()函数

void *calloc(size_t nmemb,size_t size);

calloc函数是跟malloc()差不多,不过多了个初始化内存分配空间的,由于内存分配空间有可能被使用过,确保数据有效性需把内存区域全部初始化为0。用法如下:

int *p_mem=(int*)calloc(1024,sizeof(int));

②realloc()函数

void *realloc(void *ptr,size_t size);

realloc()函数用于重新分配正在使用的内存大小,用法如下:

int *p_pem=(int*)malloc(1024);
p_mem=(int*)realloc(2048);

今天的学习就这么多!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值