美文网首页
一个指针占几个字节?原理是什么呢?

一个指针占几个字节?原理是什么呢?

作者: 恍然如梦_b700 | 来源:发表于2020-07-01 12:01 被阅读0次

一个指针到底占几个字节

其实,这个问题很简单,稍微上网一搜,你就知道:
一个指针在64位的计算机上,占8个字节;
一个指针在32位的计算机上,占4个字节。

为什么呢?

首先,我们要明白,指针就是地址,地址就是指针。 而地址是内存单元的编号。所以,一个指针占几个字节,等于是一个地址的内存单元编号有多长。
我们都知道,在计算机中,CPU不能直接与硬盘进行数据交换,CPU只能直接跟内存进行数据交换。而CPU是通过数据总线、地址总线、控制总线三条线与内存进行数据传输与操作。

假如,我们想通过CPU在内存中读取一个数字3,那么是怎样一个操作呢?
首先,CPU通过地址总线,在内存中找到数字3的地址;通过控制总线知道该操作是读还是写;然后通过数据总线,把数字3传输到CPU中。

我们可知道:
地址总线的宽度决定了CPU的寻址能力;
数据总线的宽度决定了CPU单次数据传输的传送量,也就是数据传输速度;
控制总线决定了CPU对其他控件的控制能力以及控制方式。

这是几种总线的类型以及简单功能。

我们平时所说的计算机是64位、32位、16位,指的是计算机CPU中通用寄存器一次性处理、传输、暂时存储的信息的最大长度。即CPU在单位时间内(同一时间)能一次处理的二进制数的位数。

image

假如,某计算机的地址总线是32位,那么其一次可以处理的信息是32条,每一条地址总线有0或1两种可能,那么32根地址总线一共有232种可能,也就是其描述的地址空间为0x0000 0000 0000 0000 ~ 232-1。
我们一般需要32个0或1的组合就可以找到内存中所有的地址,而32个0或1的组合,就是32个位,也就是4个字节的大小,因此,我们只需要4个字节就可以找到所有的数据。所以,在32位的计算机中,指针占4个字节。同理,在64位的计算机中,指针占8个字节。

同时也可以看出,由于地址总线为32,那么每次寻址的空间为0x0000 0000 0000 0000 ~ 232-1,那么CPU的最大内存为232Byte=222KB=212MB=22GB=4GB。

举个例子

内存地址就像一条路上的门牌号,用几位表示需要看门牌数量。
门牌号从0号开始编排,到232-1号结束,一共就有232个门牌号。分别为二进制的
000000000000000000000000000号
000000000000000000000000001号
000000000000000000000000010号
最后
111111111111111111111111110号
111111111111111111111111111号
每个门牌的号码是32位(二进制),一个字节为8位,32位就是4字节。

其他知识点:

数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。
1bit就是二进制的0和1
1字节(Byte) = 8位(bit)=8比特
1个英文字母(不分大小写)占一个字节的空间
计算机能够处理的最小单元是 字节 而不是位
位,是由软件通过位运算符操作的

指针和指针变量的区别
内存地址是内存单元的编号 ;
指针就是地址,地址就是指针;
指针变量就是存放地址的变量,也可以说,指针变量就是存放指针的变量
例如:
int *p中p就是指针变量。
需要注意:通常我们叙述时,会把指针变量简称为指针,实际上它们的含义并不一样

相关文章

  • 一个指针占几个字节?原理是什么呢?

    一个指针到底占几个字节 其实,这个问题很简单,稍微上网一搜,你就知道:一个指针在64位的计算机上,占8个字节;一个...

  • 指针占几个字节

    16位系统,指针占2个字节(16 / 8 = 2),32位系统,指针占4个字节(32 / 8 = 4),64位系统...

  • iOS 基本数据类型字节数

    指针类型在32位占4自己,64下占8个字节。NSInteger 在32下占4个字节,64占8个字节。long 在3...

  • 剑指offer----数组、数值

    下面代码的输出是什么 因为sizeof(data1)是求数组的大小,每个整数占4个字节;第二个是因为指针占8个字节...

  • C语言指针

    1.指针是一个变量;声明一个指针 int *p;p是指针变量,类型是int *,64位系统下所有指针都占8个字节;...

  • C语言指针数组和数组指针

    一、指针数组和数组指针的内存布局 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。...

  • iOS-Objc基础

    一. NSObjcet对象在内存中占多少个字节? 我觉得吧,对象是指针,64位系统一个指针就是8个字节,就是8个字...

  • ios面试题

    1 NSobject本质是什么,占用多少内存 2 一个自定义对象占多少内存 对象实际 一个isa指针占用8个字节I...

  • 指针&MachO文件

    指针&MachO文件 指针 指针在64位中,占8个字节(64个 bit) 编译器决定了指针不能做乘法和除法; 指针...

  • iOS 如何面试求职者

    iOS底层知识面试: OC对象占几个字节? 对象的isa指针指向哪里? OC类信息存在哪里?KVO、KVC: iO...

网友评论

      本文标题:一个指针占几个字节?原理是什么呢?

      本文链接:https://www.haomeiwen.com/subject/qsecqktx.html