C语言内存分配(栈、堆、段)

C语言内存分配(栈、堆、段)

1、栈:保存局部变量、函数形参、自动变量(一般未加 static 的局部变量都是自动变量)

  • 特点:先进后出、空间由系统管理
  • 栈区生命周期在函数调用结束后释放
  • 栈区保存的局部变量未初始化时,默认初始化为随机值

2、堆由 malloc 等函数分配的空间在堆区(先进先出,由用户管理)

3、段

  • .bss:保存未初始化的全局变量、系统默认是 0
  • .data:保存已初始化的非零全局变量和static声明的变量
  • .text段保存程序执行代码(函数体)(只读)。也有可能包含一些只读的常数变量,例如字符串常量等

注意

  • C语言中使用 char *p = "linux" 定义字符串时,字符串 "linux" 实际被分配在代码段,也就是说这个 "linux" 字符串实际上是一个常量字符串而不是变量字符串
  • const 型常量:C语言中 const 关键字用来定义常量,常量就是不能被改变的量

const的实现方法至少有2种:

  • 第一种就是编译将 const 修饰的变量放在代码段去以实现不能修改(普遍见于各种单片机的编译器)

  • 第二种就是由编译器来检查以确保 const 型的常量不会被修改,实际上 const 型的常量还是和普通变量一样放在数据段的(gcc中就是这样实现的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值