malloc去哪里找物理地址
时间: 2024-05-21 18:08:56 浏览: 184
在C语言中,malloc函数用于动态分配内存。然而,malloc并不会直接返回物理地址,它返回的是一个虚拟地址,该虚拟地址指向一块连续的内存空间。这块内存空间的物理地址是由操作系统的内存管理器决定的,对于应用程序来说是不可见的。
如果你想获取这块内存空间的物理地址,可以使用操作系统提供的函数进行查询。在Linux系统中,可以使用pmap命令查看某个进程的内存映射情况,其中包括虚拟地址和物理地址的对应关系。在Windows系统中,可以使用VMMap工具查看进程的内存映射。
相关问题
malloc申请的连续空间是指在虚拟地址空间中连续还是在物理地址空间中连续
malloc函数在申请内存时,是在虚拟地址空间中连续分配内存,而不是在物理地址空间中连续分配。虚拟地址空间是操作系统给进程分配的抽象地址空间,它可以与物理地址空间进行映射,从而让进程能够访问实际的物理内存。
当你使用malloc函数申请一块连续的内存时,操作系统会在虚拟地址空间中找到一块足够大的连续空间来满足你的需求。这块虚拟地址空间是连续的,但并不意味着对应的物理内存地址也是连续的。
实际上,操作系统可能会将这块连续的虚拟地址空间映射到不连续的物理内存页面上。这是因为操作系统使用了虚拟内存管理技术,将虚拟地址空间分割成若干个页面,每个页面可能映射到不同的物理内存页面上。这样可以更高效地利用物理内存,并提供更灵活的内存管理功能。
malloc出虚拟地址
malloc()函数是用于在堆内存中动态分配指定字节数的内存空间。它返回一个指向分配内存的指针。虚拟地址是指在程序中使用的地址,而不是物理内存中的实际地址。
当调用malloc()函数时,它会在堆内存中找到一块足够大小的空闲内存,并返回一个指向该内存的指针。这个指针是一个虚拟地址,因为它指向的是程序中的内存地址空间。
虚拟地址可以通过指针变量来访问和操作分配的内存空间。但需要注意的是,虚拟地址不能直接用于访问物理内存,而是需要经过操作系统的地址转换机制将其映射到物理内存中的实际地址。
总结来说,malloc()函数分配的是虚拟地址空间,而不是物理地址空间。虚拟地址需要经过操作系统的映射机制转换为物理地址才能访问实际的内存。
阅读全文