小言_互联网的博客

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

390人阅读  评论(0)

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是强类型语言。

变量的本质

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

指针的本质

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

数组声明的内存排序

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

转载:https://blog.csdn.net/weixin_43806691/article/details/109373203
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场