C语言的内存与地址及相关一些基本概念

本文详细介绍了32位操作系统为何限制为4GB内存,阐述了内存、堆、地址的本质及关系。内存作为临时数据存储区域,由操作系统管理,而堆则是自由分配的空间。地址在32位系统中表现为32位二进制数,每个字节对应一个地址。此外,探讨了变量、指针和数组在内存中的表示,以及C语言的弱类型特性。最后,讨论了内存的分布,包括代码段、数据段、堆和栈的顺序。
摘要由CSDN通过智能技术生成

32位操作系统为什么有4G内存?

  • 32位操作系统安装在32位电脑中,32位电脑的CPU是32位,即地址总线是32根,CPU处理程序,发出指令给到地址总线(地址总线的作用是传递地址到寻址空间——寻找地址)因为地址总线有32根,所以可以传递出2的32次方中结果,寻址空间会根据这个结果在内存中寻找对应的编号(在开机的时候操作系统就会为内存中的每一个字节进行编号,这个标号即为地址),一个编号对应的是一个字节所以可以寻找到2的32此方个字节(即4G),所以该电脑只能寻找到4G内存,所以32位系统只“需要”管理4G内存,所以32位操作系统在开机的时候只会给4G内存编号,即通俗表达“32位操作系统只能管理4G内存”

内存是什么

  • 计算机"临时"储存"数据"(变量)的地方—程序执行的时候变量存储在内存中,程序执行完毕,内存释放
  • 硬盘:计算机"永久"储存"数据"(文件)的地方
  • 内存是由操作系统管理的

堆是什么

  • 自由分配的空间,自由申请的空间是堆空间

地址的本质

  • 如果是32位的电脑,那么地址是32位的二进制数

内存与地址的关系

  • 一个字节的内存会被分配一个地址

内存的分布(从小到大)

  • 代码段:存储代码块(函数的声明)
  • 数据段:常量,全局变量,静态变量
  • 堆:自由分配的空间
  • 栈:存储局部变量的地方
    – 一个函数与一个函数分配在不同的栈中
    – 一个函数再将要执行的时候,系统会判断出该函数将会占用多少空间,然后分配出来这么多空间作为一个栈
    – 栈的地址是从大地址到小地址分配的,
    – 一个栈中的数据的分配是从小地址到大地址分配的
    – 栈-----先进后出 后进先出
  • 系统内存:系统运行占用的空间

换算关系与单位

  • 内存的最小存储单位是"字节"
  • 1字节 = 8个二进制位
  • 1K = 1024字节;1M = 1024K;1G = 1024M
  • 1个16进制位 = 4个2进制位

c语言是一种弱类型语言

  • 如何判别:数据存储到内存当中就可以看出他的数据类型,是强类型。例:有数据类型限制的大部分是静态声明,否则是
    反之,看不出是弱类型。例:ASCLL A 和65 都是65,分辨不出是否一样。JS是强类型语言。

变量的本质

  • 变量名只是一个代号,地址。
  • 变量的本质就是内存 。
  • 数据写到内存中
  • 一个字节8个二进制数1
  • 一个字节8位。32位就是48=32,64位就是88=64。
  • 指针就是一种数据类型,专门为地址产生的。
  • 除了代码编译后存在代码段以外 ,当前调用那个函数,当前调用的函数运行到多少行,并且这个函数中有哪些变量,这些变量的值是什么, 这个记录的地方在哪呢?存在栈。

指针的本质

  • C语言中所有的变量都有类型
  • int类型就保存整数
  • doublue类型就保存的双精度的浮点数
  • 指针保存的是内存地址

数组声明的内存排序

  • C语言声明数组要声明数组的长度
  • 在函数里声明在栈内存里,函数执行的时候结果也在栈内存里
  • 如果我们在使用指针的时候,如果我们在程序里面,使用到了一个我们没有声明过的变量所指向的内存空间的话,那我们会得到随机的值。C语言不做指针的安全检查,只要给了一个地址,就操作一个地址,把值取出来
  • 95
    点赞
  • 318
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值