指针的地址将存储在内存中的哪个位置?

Ram*_*avi 0 c memory-management virtual-memory

我正在研究虚拟内存和自由空间管理.

我知道我们使用malloc分配的指针将在堆中请求一块内存.但是当我们调用malloc()系统调用时,它将返回一个整数作为专用内存块的地址,但是这个地址将在何处存储?

假设

int *ptr = malloc (16);
Run Code Online (Sandbox Code Playgroud)

返回mem的4008地址.它从4008到4022开始.这个块在堆中.但4008本身在哪里?

它存储在堆栈中吗?

Ark*_*kku 5

考虑您的示例代码:

int *ptr = malloc(16);
Run Code Online (Sandbox Code Playgroud)

指针ptr初始化为返回值malloc.让我们假设malloc回报4008.因此,ptr4008.根据编译器的不同,这个值最终可能只存储在一个寄存器中,在这种情况下,技术上ptr没有地址,但由于编译器需要表现得像它一样,如果你取地址ptr(例如表达式&ptr,有类型int **)指针将与其他局部变量一起存储在堆栈中.同时,在该示例中,指向的值ptr将存储在由其返回的地址处.malloc4008

  • 请注意,除了用作指针之外,这与`int i = 4008;`没有根本区别 (2认同)