为指针分配内存

Man*_*anu 5 c pointers

我通过提供不同的输入来调试两个终端中的程序,但特别是我在一个终端中看到了这个

ins (ptr=0x0, key=1, upKey=0xbffff308, newnode=0xbffff30c)
Run Code Online (Sandbox Code Playgroud)

在另一个终端

ins (ptr=0x0, key=1, upKey=0xbffff308, newnode=0xbffff30c)
Run Code Online (Sandbox Code Playgroud)

ins功能在哪里

ins(struct node *ptr, int key, int *upKey,struct node **newnode)
Run Code Online (Sandbox Code Playgroud)

如何将相同的内存位置分配给指针.我在两个不同的终端上运行相同的程序......输入不同

小智 9

您正在查看的内存地址是虚拟地址.然后,处理器将这些地址转换为物理地址.这是所有现代操作系统的基础.每个进程都认为它拥有整个地址空间(在32位机器的情况下为4GB,在64位机器的情况下则更多).当进程访问尚未分配给它的内存时,CPU会生成页面错误.然后,操作系统可以通过多种方式之一处理无效的内存访问; 一种常见的方式是分段错误.


tem*_*def 5

对于虚拟内存,系统上运行的每个程序都充当了计算机自身的整个地址空间.但是,每次取消引用指针时,一个特殊的硬件都会从指针的声称地址(其虚拟地址)转换到数据实际存在的内存中的某个其他位置(物理地址).操作系统用于管理和移动映射虚拟地址的内存区域,因此,如果一个程序取消引用某个地址A,它将映射到物理内存中的不同位置,而不是在不同地址取消引用地址A时处理.事实上,任何数量的程序都可以声称使用地址A而没有麻烦,因为这些虚拟地址都解析为系统上的不同物理地址.