如何把网站放在根目录,兰州网站建设招聘信息,120平三室两厅简约装修,公司的网 网站打不开文章目录 1.指针的来源2.指针的定义#xff1a;3.字长和数据类型4.Linux内核为什么常用unsigned long来替代指针#xff1f;参考资料 1.指针的来源
方便引用一个内存地址。 给定一个内存地址#xff0c;CPU就可以取出该地址的数据。 给定一个内存地址#xff0c;CPU就可以… 文章目录 1.指针的来源2.指针的定义3.字长和数据类型4.Linux内核为什么常用unsigned long来替代指针参考资料 1.指针的来源
方便引用一个内存地址。 给定一个内存地址CPU就可以取出该地址的数据。 给定一个内存地址CPU就可以写入该地址一个值。
2.指针的定义
指针的本质其实也是一个数据类型和char, short, int 等一样都属于c语言中的基本类型所以大小也确定了与它是什么类型无关32位系统为4个字节64为系统为8个字节。 无论指针什么类型大小以确定它存放的都是一个地址只不过这个地址存放不同数据类型而已。 指针变量与其它变量如int相似也有两个方面即值 和 类型(所指向的数据类型) 值表示某个对象的地址位置。 类型表示那个地址位置上所存储对象的类型。
备注指针的强制类型转换不会改变真实的指针只是告诉编译器以新的数据类型来看待被指向的数据。
3.字长和数据类型
在支持Linux的体系结构中能够由机器一次完成处理的数据称之为字指明了指针数据的 nominal size。虚拟地址是以这样的一个字来编码所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。即对于一个字长位n的机器虚拟地址的范围位 0 ~ 2n-1 程序最多访问2n个字节。
处理器通用寄存器的大小和他的字长是相同的。long类型总是等于机器的字长也等于指针的大小。 但是long和int 大小没办法保证一样。比如 Linux支持的64位体系架构 long 8个字节int 4个字节。 Linux支持的32位体系架构 long 4个字节int 4个字节 因此不要假设 long 和 int 长度相等也不要假设指针和int 长度相等。 备注上面只是讨论支持Linux的体系架构
4.Linux内核为什么常用unsigned long来替代指针
因为指针也是一种基本类型所以大小是确定的32位系统下为4个字节由于地址的值不能为负所以指针的值的范围为 0 - (2^32-1)与unsigned long大小值的范围一样。 所以32位系统下指针的最大寻址范围为2^32-1即4G(所以32位系统虚拟地址为0 - 4G)。 64位系统下大小为8个字节与unsigned long大小值的范围一样。 可见指针与unsigned long 大小值的范围也一样。但意义不一样只是值一样
小结指针与unsigned long 大小一样值的范围也一样。 当linux内核只关心这个地址的值用于去运算、查找、对比而不是关心通过这个地址去访问内存这个时候内核经常用unsigned long来替代指针。
参考资料
为什么Linux内核常常用unsigned long来代替指针 聊聊C语言和指针的本质