操作系统下的指针长度

来源:互联网 发布:软件开发可行性报告 编辑:程序博客网 时间:2024/05/18 01:34

在学习C语言时,相信很多初学者对指针的长度都会有相当程度的判断不准确。本篇博客,将会对指针在不同的系统环境下的长度做出实验验证,以及解析。

实验目的:主要判断指针字节长度,也会对struct结构体的字节长度进行判断和拓展解析。

实验环境:32位ubuntu系统下的gcc编译器

示例代码:

#include <stdio.h>

 

struct info{

         char a;

         char b;

};

 

int main() {

         int x = 20;

         char y = 'A';

 

         double z = 1.0;

 

         struct info *test = NULL;

 

         int *p1 = &x;

         char *p2 = &y;

         double *p3 = &z;

         struct info *p4 = test;

 

         printf("the size list are %d,%d,%d,%d\n",sizeof(p1),sizeof(p2),sizeof(p3),sizeof(p4));

         printf("the struct size is %d\n", sizeof(struct info));

}

 

  32位Ubuntu系统实验结果:

64位ubuntu系统的实验结果:


拓展:

               指针为了能够正确指示内存中的地址,需要按照地址总线的宽度进行变量的存储,尽管64位CPU的数据宽度为64位而其地址总线一般不为64位(能访问的内存空间大的惊人,暂时估计应该还做不到),一般能超过32位,指针的长度也就大于4个字节(32位的),64位机的指针字节为64位即8个字节,而32位机的地址总线一般为4个字节(即支持4GB的内存),则其指针的宽度为4个字节。

               为了代码效率,我们在定义结构体的时候,如果结构体、数组所包含的字节不超过4个字节,则一般凑齐4个字节。最好定义长度是4的整数倍数。


0 0
原创粉丝点击