前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >指针的内存大小

指针的内存大小

作者头像
黎鹤舞
发布2024-03-19 15:08:49
1300
发布2024-03-19 15:08:49
举报
文章被收录于专栏:黎鹤舞的编程技术栏

1.前提知识

1.1内存的简介

计算机中所以的信息都是以二进制的形式表示,即 0 和 1 。1 个二进制位的数据传输是以 “位”(bit)为单位。

1.2操作系统简介

市面上我们经常能看到x86-64位操作系统,如我的电脑就是64位的操作系统。 x84是inter在研发cpu的一种型号,我们把这种架构统称位x86架构,而后面的64位或者32位,是cpu中一次可以取出多少个二进制数(在1.1中我们了解到一个二进制数在计算机里就是一位,即1bite)。 下图为我的电脑

1.3cpu的兼容性

很多人在了解到上述两种结构时会发现自己的64位系统能够运行32位的应用程序,这是由于cpu具有向下兼容性。因为64位是cpu一次最多能够提取出多少位,不是只能提取多少位。就好比一条马路有64个车道,代表最多可以走64辆车,当然32位也是可以通过的。而在x84架构中,我们的cpu每一次提供一条不可分割的32位指令传递给cpu,这样说明了64位系统为什么可以运行32位程序。

2.指针的内存大小

了解上述内容后我们来看指针的内存大小。首先,指针就是一个变量,用来存储地址信息。所以无论什么类型的指针,其内存大小都是相同的,都是数据的存储空间长度。

2.1不同系统环境的指针内存大小

32位----32bit----4Byte

64位----64bit----8Byte 原理是因为不同系统中cpu能够一次性提取的位不同,所以地址长度也不同。 注:一个字节(Byte)有8比特(bite)

2.2代码测试

我们现在x86-32位系统上进行编译 (visual studio2019开发环境)

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int a = 0;
	//%p是以地址形式打印
	printf("%p",&a);
	return 0;
}

(%p是以地址形式打印) 运行结果:

一个字节是右两个16进制数表示的,图中006FF8F8一共8个16进制数 所以应该是4个字节 让我们用sizeof()操作符来运算一下:

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int a = 0;
	int * p = &a;
	//sizeof()操作符计算的结果是size_t(无符号数)类型,所以用%zd
	printf("%zd\n",sizeof(p));
	return 0;
}

其运行结果为:4

果然不出我们所料,结果是正确的。


现在我们换到x64系统来看一下指针的内存大小

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int a = 0;
	int * p = &a;
	printf("%p\n",p);
	printf("%zd\n",sizeof(p));
	return 0;
}

结果如图:

可以来说结果完全符合我们的上述的解释。

3. 总结

指针的内存大小就是变量的地址长度。在不同系统环境中其地址长度也不同,所以指针内存的大小通常为4字节(32位)或者8字节(64位)。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.前提知识
    • 1.1内存的简介
      • 1.2操作系统简介
        • 1.3cpu的兼容性
        • 2.指针的内存大小
          • 2.1不同系统环境的指针内存大小
            • 2.2代码测试
            • 3. 总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档