为什么4个字节需要4个内存地址 - 如果内存地址是4个字节?

时间:2017-09-26 14:44:10

标签: c

array[0]的地址:008FFE14

array[1]的地址:008FFE18

代码示例:

int main() {
  int array[2] = {1, 2};
  printf("%p\n", &(array[0]));
  printf("%p\n", &(array[1]));
  printf("Integer size: %d\n", sizeof(int));
  printf("Word size: %d\n", sizeof(void*));
}

代码输出:

008FFE14
008FFE18
Integer size: 4
Word size: 4

2 个答案:

答案 0 :(得分:0)

  

为什么4个字节需要4个内存地址 - 如果内存地址是4个字节?

因为可能存储int(大小为4个字节)的相同内存也需要能够存储char s(大小为1个字节)。

答案 1 :(得分:0)

我想我理解你的困惑。

指针(内存地址)占用多少与它指向的数据类型无关(intchar等。)

指针的大小决定了内存中可寻址的位置数。现代系统架构是字节可寻址的。这意味着内存地址是一个字节的地址。

E.g。

  • 使用1字节指针(8位)有2^8 = 256个可寻址字节。不太有用。

  • 使用2字节指针(16位),有2^16 = 65,536个可寻址字节。

  • 使用4字节指针(32位),有2^32 = 4,294,967,296个可寻址字节。那是大约4 GiB的可寻址内存。

  • 使用8字节指针(64位),有2^64 = 18446744073709551616个可寻址字节。那是大约16 EiB(exbibytes)。

正如您所看到的,指针的大小决定了可寻址的内存量。它与数据占用内存无关。

数据类型的大小确定数据类型在内存中占用的字节数。例如,某些系统上的int占用32位内存。这是4个字节,即4个可寻址存储器位置。这不受总内存可寻址大小的任何影响。它不受指针大小的影响。