1、系统数据结构说明 MEMORYSTATUS中包含当前物理内存和虚拟内存信息,使用GlobalMemoryStatus()可以将信息存储到MEMORYSTATUS中。 2、VirtualAlloc():分配虚拟内存空间 VirtualFree():释放或者注销某一段虚拟存储空间 malloc():分配内存空间 free():释放内存空间 三、实验内容 1、建立一个控制台程序,查看系统物理内存大小、页文件大小、虚拟内存大小。2、使用VirtualAlloc()和malloc()分配一定数量的虚拟内存空间和物理内存空间,再次按1的要求查看相关内存参数。 2、使用VirtualFree()和free()释放步骤2分配的内存和虚拟内存,再次按1的要求查看相关内存参数。 4、截图并完成实验报告。 四、主要内容(步骤和源代码) 五、实验截图和总结
时间: 2024-02-06 19:04:46 浏览: 93
操作系统实验报告——虚拟内存与共享内存
3星 · 编辑精心推荐
很好,这是一个关于内存管理的实验,包括了系统数据结构、内存分配和释放函数等内容。以下是具体步骤和源代码:
步骤一:建立一个控制台程序,查看系统物理内存大小、页文件大小、虚拟内存大小。
```
#include <windows.h>
#include <stdio.h>
int main()
{
MEMORYSTATUS memstat;
GlobalMemoryStatus(&memstat);
printf("系统物理内存大小:%d MB\n", memstat.dwTotalPhys / 1024 / 1024);
printf("页文件大小:%d MB\n", memstat.dwTotalPageFile / 1024 / 1024);
printf("虚拟内存大小:%d MB\n", memstat.dwTotalVirtual / 1024 / 1024);
return 0;
}
```
步骤二:使用VirtualAlloc()和malloc()分配一定数量的虚拟内存空间和物理内存空间,再次按1的要求查看相关内存参数。
```
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
MEMORYSTATUS memstat;
GlobalMemoryStatus(&memstat);
printf("系统物理内存大小:%d MB\n", memstat.dwTotalPhys / 1024 / 1024);
printf("页文件大小:%d MB\n", memstat.dwTotalPageFile / 1024 / 1024);
printf("虚拟内存大小:%d MB\n", memstat.dwTotalVirtual / 1024 / 1024);
// 分配虚拟内存
LPVOID lpvMem = VirtualAlloc(NULL, 1024 * 1024 * 100, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if (lpvMem == NULL)
{
printf("分配虚拟内存失败\n");
return -1;
}
// 分配物理内存
int *p = (int*)malloc(1024 * 1024 * 50);
if (p == NULL)
{
printf("分配物理内存失败\n");
return -1;
}
GlobalMemoryStatus(&memstat);
printf("分配后系统物理内存大小:%d MB\n", memstat.dwTotalPhys / 1024 / 1024);
printf("分配后页文件大小:%d MB\n", memstat.dwTotalPageFile / 1024 / 1024);
printf("分配后虚拟内存大小:%d MB\n", memstat.dwTotalVirtual / 1024 / 1024);
return 0;
}
```
步骤三:使用VirtualFree()和free()释放步骤二分配的内存和虚拟内存,再次按1的要求查看相关内存参数。
```
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
MEMORYSTATUS memstat;
GlobalMemoryStatus(&memstat);
printf("系统物理内存大小:%d MB\n", memstat.dwTotalPhys / 1024 / 1024);
printf("页文件大小:%d MB\n", memstat.dwTotalPageFile / 1024 / 1024);
printf("虚拟内存大小:%d MB\n", memstat.dwTotalVirtual / 1024 / 1024);
// 分配虚拟内存
LPVOID lpvMem = VirtualAlloc(NULL, 1024 * 1024 * 100, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if (lpvMem == NULL)
{
printf("分配虚拟内存失败\n");
return -1;
}
// 分配物理内存
int *p = (int*)malloc(1024 * 1024 * 50);
if (p == NULL)
{
printf("分配物理内存失败\n");
return -1;
}
GlobalMemoryStatus(&memstat);
printf("分配后系统物理内存大小:%d MB\n", memstat.dwTotalPhys / 1024 / 1024);
printf("分配后页文件大小:%d MB\n", memstat.dwTotalPageFile / 1024 / 1024);
printf("分配后虚拟内存大小:%d MB\n", memstat.dwTotalVirtual / 1024 / 1024);
// 释放虚拟内存
if (!VirtualFree(lpvMem, 0, MEM_RELEASE))
{
printf("释放虚拟内存失败\n");
return -1;
}
// 释放物理内存
free(p);
GlobalMemoryStatus(&memstat);
printf("释放后系统物理内存大小:%d MB\n", memstat.dwTotalPhys / 1024 / 1024);
printf("释放后页文件大小:%d MB\n", memstat.dwTotalPageFile / 1024 / 1024);
printf("释放后虚拟内存大小:%d MB\n", memstat.dwTotalVirtual / 1024 / 1024);
return 0;
}
```
步骤四:截图并完成实验报告。
步骤五:实验截图和总结。
阅读全文