C语言的内存与地址及相关一些基本概念
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语言不做指针的安全检查,只要给了一个地址,就操作一个地址,把值取出来