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

299 阅读4分钟

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语言不做指针的安全检查,只要给了一个地址,就操作一个地址,把值取出来。