C语言内存相关的一些知识点

本文整理了C语言中关于内存管理的关键概念,包括栈、代码段、数据段的区别,内存规划,以及栈和堆的地址分配规则。还探讨了局部变量与静态变量的差异,以及在不同操作系统环境下内存的使用限制。同时,提到了指针在32位和64位系统中的大小以及&和*运算符的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  整理了一些离散的概念点

  1. 1.栈和代码段、数据段不一样,栈是越靠近栈顶,其内存地址越小,而代码段和数据段则是,越往后,其内存地址越大
    数据段放啥呢:全局变量,常量,函数里的静态变量。
    内存的规划,从高地址到低地址是:栈段,自由段,堆段,数据段,代码段。栈自堆数代
  2. 栈的特点:先进后出,
    内存地址由大到小。
    地址分配:代码,数据段是从下往上分配(先低地址,后高地址),栈是从上往下分配(先高地址,后低地址)
    

    函数中静态变量,局部变量区别:
    局部变量在栈(相对数据段而言的高地址)中,而静态变量在数据段(低地址)中.
    所以在多次调用函数时,静态变量不会被重新,初始化. 或者这么说,静态变量的生存周期和数据段相同,局部变量

  3. 32位操作系统(32个地址总线,2的32次幂 2的30次方1024的3次方,就是1G)做多使用4G内存
    64位操作系统(2的30次方 =G,2的40次方=T)0xffffffffffffffff - 0x0
    


  4. 指针 32位时 占用4个字节
    指针 64位时 占用8个字节

  5. &a:返回变量a的内存地址

    *a:用来保存变量a的内存地址

    &和*运算符恰好相反。&运算符接收一个数据,然后告诉你这个数据保存在哪里;*运算符接收一个地址,然后告诉你这个地址中保存的是什么数据。

&:表示获取变量的地址


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值