我通过提供不同的输入来调试两个终端中的程序,但特别是我在一个终端中看到了这个
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会生成页面错误.然后,操作系统可以通过多种方式之一处理无效的内存访问; 一种常见的方式是分段错误.
对于虚拟内存,系统上运行的每个程序都充当了计算机自身的整个地址空间.但是,每次取消引用指针时,一个特殊的硬件都会从指针的声称地址(其虚拟地址)转换到数据实际存在的内存中的某个其他位置(物理地址).操作系统用于管理和移动映射虚拟地址的内存区域,因此,如果一个程序取消引用某个地址A,它将映射到物理内存中的不同位置,而不是在不同地址取消引用地址A时处理.事实上,任何数量的程序都可以声称使用地址A而没有麻烦,因为这些虚拟地址都解析为系统上的不同物理地址.