c++ - 为什么 c 中地址的值总是偶数?

标签 c++ numbers

为什么C和C++中地址的值总是偶数? 例如:我声明了一个变量 int x,x 的内存地址为 0x6ffe1c(十六进制)。无论。该值永远不是奇数,它始终是偶数。为什么会这样??

最佳答案

计算机内存由位组成。这些位被组织成组。一台计算机可能有 1 GB 的内存,超过 1,000,000,000 字节或 8,000,000,000 位,但与内存的物理连接不能简单地从内存中获取任何一个特定位。

当处理器需要内存中的数据时,它会在总线 上发送一个信号,请求内存中的特定。总线主要是一组连接计算机不同部分的电线。一个内存字是一组特定于该硬件的特定大小的位,可能是 32 位。当存储设备看到一个字的请求时,它会立即获取这些位并将它们放在总线上。 (该总线将有 32 条或更多线,因此它可以一次承载一个字的所有数据。)

让我们继续以 32 位字为例。由于内存被分成 32 位的字,每个字都有一个内存地址,它是 32 位的倍数,或四个字节。每个地址是四的倍数(0、4、8、12、16、……4096、4100、4104……)都是一个字的地址。处理器总是以字为单位读取或写入内存——这是硬件唯一可以进行的交互;处理器无法从内存中读取单个字节。如果您的 int 是一个单词,那么处理器可以通过请求该单词从内存中获取它。

另一方面,假设您的 int 从地址 99 开始。那么它的一个字节在从地址 96(地址 96 到 99)开始的字中,它的三个字节是在从地址 100(地址 100 到 103)开始的字中。为了获得您的 int,处理器必须读取两个 单词,然后将它们拼接成一个 int

首先,这是浪费时间。从内存中读取两次比读取一次花费的时间更长。其次,如果处理器必须有额外的线路和电路来执行此操作,它会使处理器更昂贵并使用更多的能量,并且它会占用处理器可以做的其他事情的资源,例如加法或乘法。

所以处理器被设计成更喜欢对齐的数据。它们可能具有用于处理未对齐数据的组件,但使用这些组件可能需要额外的时间或资源。因此,编译器旨在以适合目标体系结构的方式对齐对象。

关于c++ - 为什么 c 中地址的值总是偶数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58380087/

相关文章:

c++ - C/C++ JSON 解析器

jquery - 在移动应用程序中单击/选择号码时如何在号码上显示设备拨号盘

loops - Prime #程序识别假素数

PHP - 在文件中查找一个字符串然后显示它的行号

java - 接受一系列数字? for循环

c++ - Visual Studio C++ Link1104 无法打开文件 MSVCURTD.lib

c++ - Mac 上 Qt Creator 中的 openCV

c++ - 如何区分使用内存池分配的类

c++ - 如何更改另一个 qml 文件的标签文本?

javascript - 如何将输入限制为数字 0-9?