操作系统下的指针长度

本文通过实验探讨了C语言中指针在32位和64位操作系统下的长度差异,以及结构体字节长度的判断。在32位Ubuntu系统下,指针长度为4个字节,而在64位系统中,指针长度增加到8个字节。实验同时提到,结构体定义时通常会考虑对齐到4个字节的整数倍以优化代码效率。

在学习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的整数倍数。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值