C/C+中的内存分配+; 当你在C或C++中声明int类型的变量x时,我知道它将占用4字节的内存。因此,为该变量分配了4个内存地址。我的问题是我能看到分配给这个变量的所有四个内存地址吗?我知道这不是一个典型的问题,但我很好奇。或者它总是100%只包含内存地址&x和接下来的3位?如果是内存地址1000,那么下一个将是1001、1002和1003?它有没有偏离这一点
也就是说,我设置x=5 这是否意味着在这个存储位置1000到1002中,它将被零填充,而在1003中,在最右边的位置有一个101(5的二进制表示) 谢谢一个C/C+中的内存分配+; 当你在C或C++中声明int类型的变量x时,我知道它将占用4字节的内存。因此,为该变量分配了4个内存地址。我的问题是我能看到分配给这个变量的所有四个内存地址吗?我知道这不是一个典型的问题,但我很好奇。或者它总是100%只包含内存地址&x和接下来的3位?如果是内存地址1000,那么下一个将是1001、1002和1003?它有没有偏离这一点,c++,c,memory,C++,C,Memory,也就是说,我设置x=5 这是否意味着在这个存储位置1000到1002中,它将被零填充,而在1003中,在最右边的位置有一个101(5的二进制表示) 谢谢一个int可以是四个字节,尽管这实际上取决于编译器。因此,为什么会有特定的尺寸类型,如uint32\u t。但是为了论证起见,我们假设您的int是四个字节 是的,这四个字节是连续的。因此,&x和接下来的三个字节是变量的位置,这是正确的 然而,您认为最右边的字节是最不重要的字节的假设仅适用于机器。在一个小的endian架构(如x86)上,最左边的字
int
可以是四个字节,尽管这实际上取决于编译器。因此,为什么会有特定的尺寸类型,如uint32\u t
。但是为了论证起见,我们假设您的int
是四个字节
是的,这四个字节是连续的。因此,&x
和接下来的三个字节是变量的位置,这是正确的
然而,您认为最右边的字节是最不重要的字节的假设仅适用于机器。在一个小的endian架构(如x86)上,最左边的字节将包含表示数字5的
101
。int的大小并不总是4字节,我们只知道
char <= short <= int <= long <= long long
char几个不准确之处:
int
的大小取决于平台(尽管在大多数情况下确实是4字节)
你说的“看地址”是什么意思?如果您想通过调试器观察它,那么只需继续,您很可能还会看到相邻的地址。如果要访问int
变量中的特定地址,则可以使用char
指针轻松访问:
intx=5代码>
char*p=(char*)&x代码>
您可以使用p[i]
来访问范围0中的任何地址int
的内存保证是连续的,尽管它不一定是4个字节。另一个问题取决于系统的端性。什么是。&x
将为您提供第一个字节的地址。内存由多块内存芯片组成。它们以2D矩阵的形式组织,列表示内存地址,而每行由4字节长的内存块组成。一行可以有32字节或64字节的连续内存块。一个int是4字节长的,所以它只需要32字节长的内存芯片中的一个地址和一块内存。“一个int可以是四个字节,尽管这实际上取决于编译器。”更像是“取决于架构/ABI”。酷!我很高兴你们包括了big endian和little endian,我正在接受一个机器组织,并且刚刚开始谈论这些东西。谢谢
#include <stdio.h>
void main() {
int A = 10;
int *intPtr;
char *charPtr;
size_t size = sizeof(int);
size_t i;
intPtr = &A;
printf("%d\n", *intPtr);
charPtr = (char*) intPtr;
for (i = 0; i < size; i++) {
printf("%d\n", *(charPtr++));
}
}