gpt4 book ai didi

c - 如果内存地址是 4 个字节,为什么 int 变量需要 4 个内存地址 -4 个字节?

转载 作者:行者123 更新时间:2023-11-30 19:33:01 25 4
gpt4 key购买 nike

数组[0]的地址:008FFE14

数组[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

最佳答案

我想我理解你的困惑。

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

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

例如

  • 对于 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(艾字节)。

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

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

关于c - 如果内存地址是 4 个字节,为什么 int 变量需要 4 个内存地址 -4 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46429560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com