计算机中:1个字节=8 byte;
32位代表32个地址总线,和操作系统的寻址地址有32个
一个地址代表一个字节;
1024字节=1K;32位最大管理内存4G;
1个字节占用8个二进制位;
内存交给操作系统管理;
main()函数是入口,操作系统(统一管理内存)通过入口执行代码,
操作系统除了给内存做编号,还做规划,64位。前48位作为用户,程序员调用用,剩余的供操作系统内核使用。
下图为64位操作系统的内存分配:
图中每一小格占一位,
ox0到0x7fffffffffffffff 是前48位
指针本质是内存地址;
&a(变量寻址) 变量a所占有内存的地址;变量就是个标识符,仅仅是标识作用。
*pa 指针变量(指针类型);
除了栈内存外,其余都是先声明的变量内存地址小;
数据段:存放全局变量,常量。
int类型占用 4个字节;
而且我们的寻址找的是首地址值。比如int类型连续占用四个字节。
编译器的优化功能(跟我们写代码的顺序不一样)而是将同一类型的放在一起:如下代码
int a = 1;
int *pa=&a;
int *pb=&a;
int b =2;
a:oxfffffffde00;
b:oxfffffffde04;
*pa:oxfffffffde08;
*pb:oxfffffffde10;
指针类型:
32位操作系统中,指针类型占4个字节。
64操作系统所有指针类型占8个字节。
(*qutrate) (3) //到这个地址取值。小括号表示一个整体,函数指针。
“`
(gdb) p pa
4=0x7fffffffddfe(gdb)p∗pa
4 = 3
“`指针运算(指针偏移量)
下图gdb调试 int型数组的结果,
操作系统会根据数据类型,来自动调节指针的偏移量。
char 类型的数组的偏移量为1个字节,注意的是char类型的数组以 \0结尾。“hi”是两个字节,但实际是三个字节,因为是以 \0结尾。