C 指针的地址将存储在内存中的什么位置?
我在学习虚拟内存和可用空间管理 我知道我们使用malloc分配的指针将请求堆中的内存块。 但当我们调用malloc()系统调用时,它将返回一个整数作为专用内存块的地址,但这个地址本身将存储在哪里 假定C 指针的地址将存储在内存中的什么位置?,c,memory-management,virtual-memory,C,Memory Management,Virtual Memory,我在学习虚拟内存和可用空间管理 我知道我们使用malloc分配的指针将请求堆中的内存块。 但当我们调用malloc()系统调用时,它将返回一个整数作为专用内存块的地址,但这个地址本身将存储在哪里 假定 int *ptr = malloc (16); 返回内存的4008地址。从4008开始到4022。这个块在堆中。但4008本身在哪里 它是否存储在堆栈中?考虑到您的示例代码: int *ptr = malloc(16); 指针ptr初始化为malloc的返回值。让我们假设malloc返回400
int *ptr = malloc (16);
返回内存的4008地址。从4008开始到4022。这个块在堆中。但4008本身在哪里
它是否存储在堆栈中?考虑到您的示例代码:
int *ptr = malloc(16);
指针
ptr
初始化为malloc
的返回值。让我们假设malloc
返回4008
。因此,ptr
的值变为4008
。根据编译器的不同,此值可能最终只存储在寄存器中,在这种情况下,从技术上讲,ptr
没有地址,但由于编译器需要像它那样运行,如果您使用ptr
的地址(例如通过表达式&ptr
,类型为int**
)指针将与其他局部变量一起存储在堆栈上。同时,ptr
指向的值将存储在malloc
返回的地址,在本例中,考虑到您的示例代码,4008
:
int *ptr = malloc(16);
指针
ptr
初始化为malloc
的返回值。让我们假设malloc
返回4008
。因此,ptr
的值变为4008
。根据编译器的不同,此值可能最终只存储在寄存器中,在这种情况下,从技术上讲,ptr
没有地址,但由于编译器需要像它那样运行,如果您使用ptr
的地址(例如通过表达式&ptr
,类型为int**
)指针将与其他局部变量一起存储在堆栈上。同时,ptr
指向的值将存储在malloc
返回的地址,在本例中,4008
在C中,基本上有三种类型的数据存储器(忽略常量):
- 正常、全局“数据”
- 堆栈,用于本地数据
- 堆,动态管理数据
一切都来自变数。因此,“指针地址将存储在哪里”的问题只能是一个:在变量中。除非它存储在堆本身中,在一个可通过指针访问的区域中,指针再次存储在本地或全局数据中的变量中。在C中,基本上有三种类型的数据内存(忽略常量内存):
- 正常、全局“数据”
- 堆栈,用于本地数据
- 堆,动态管理数据
一切都来自变数。因此,“指针地址将存储在哪里”的问题只能是一个:在变量中。除非它存储在堆本身的某个区域中,该区域可通过指针访问,指针会再次存储到本地或全局数据中的变量中。它是一个右值,因此不会存储在任何基于该值定义的内存位置。在您的例子中,由于您执行了
int*ptr=…
,所以您将该右值存储在