浅谈内存分类等等

在进行C/C++以及嵌入式开发的时候要对内存的了解比较精确,经常要操作的内存分类可以如下:栈区(stack)、堆区(heap)、常量区、静态区(全局区)(static)、代码区。

栈区由编译器自动分配和释放,一般存放函数的参数、局部变量的值等,操作和数据结构中的栈的操作类似。

堆区由程序员自己分配与释放,如果程序员不释放,则在程序运行完后,可能由系统收回,它与数据结构中的堆是不同的概念,分配方式与链表类似,可以用malloc、new来申请,

全局区(静态区)存放全局变量、全局静态变量、局部静态变量,全局变量与静态变量存放是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域。程序结束后由系统释放。

常量区存放字符串等,在程序结束后由系统释放。

代码区存放函数体的二进制代码。

int qa = 10;//全局初始化区,存放在全局区(静态区)
char *pv;//全局未初始化区,存放在全局区(静态区)
main()
{
int a;//局部变量,存放在栈
char *pa;//栈
char *p = "asdasdasd";//p存放在栈区,字符串存放在常量区
static int b=1;//全局(静态)初始化区
pa = (char *)malloc(10);//分配得来的10字节就存在堆区,
strcpy(pa,"3156564654");//后面的字符串数字存放在常量区,
}

对于一个进程的内存空间而言,可以在逻辑上分为三个区:代码区、动态数据区、静态数据区。

动态数据区就是“堆栈”,栈是线性结构,堆是链式结构。进程的每个线程都独自的私有“栈”,所以每个线程虽然代码一样,但本地变量的数据都是互不干扰的。


/***********************************************************************************************************/

可执行程序包括BSS段、数据段代码段(也称文本段)。

BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。BSS段属于静态内存分配。
注意和数据段的区别,BSS存放的是未初始化的全局变量静态变量数据段存放的是初始化后的全局变量和静态变量。数据段属于静态内存分配。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值