发布时间 : 星期四 文章操作系统实验报告更新完毕开始阅读
实验四 系统内存使用统计
一、 实验目的
(1)了解Windows内存管理机制,理解页式存储管理技术。 (2)熟悉Windows内存管理基本数据结构。 (3)掌握Windows内存管理基本API的使用。 二、实验内容
使用Windows系统提供的函数和数据结构显示系统存储空间的使用情况,当内存和虚拟存储空间变化时,观察系统显示变化情况。 三、实验要求
能正确使用系统函数GlobalMemoryStatus()和数据结构MEMORYSTATUS了解系统内存和虚拟存储空间使用情况,会使用VirtualAlloc()函数和VirtualFree()函数分配和释放虚拟存储空间。 四、参考实验代码
#include \#include \#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
void GetMemSta(void);
int main(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
LPVOID BaseAddr;//LPVOID是一个没有类型的指针,也就是说你可以将任意
类型的指针赋值给LPVOID类型的变量(一般作为参数传递),然后在使用的时候再转换回来。
char *str; GetMemSta();
printf(\
Memory\\n\\n\
BaseAddr=VirtualAlloc(NULL, 1024*1024*32, MEM_COMMIT,
PAGE_READWRITE); //分配虚拟内存
配内存
GetMemSta();
printf(\if (BaseAddr==NULL) printf(\str=(char *)malloc(2*1024*1024); //分
Memory\\n\\n\
}
void GetMemSta(void) //统计内存的状态 { MEMORYSTATUS MemInfo;
GlobalMemoryStatus(&MemInfo);//此函数用来获得当前可用的物理和虚拟
if(VirtualFree(BaseAddr,0,MEM_RELEASE) ) //释放虚拟内存 printf(\
free(str); //释放内存 GetMemSta(); return nRetCode;
内存信息
printf(\printf(\
is %dMB\\n\
printf(\is %dMB\\n\
printf(\
is %dMB\\n\
printf(\
is %dMB\\n\
printf(\
is %dMB\\n\
printf(\
is %dMB\\n\
printf(\}
五、总结(1)程序开始运行,首先显示的可用物理内存、可用页文件大小、可用虚拟内存三个数值,数值分别可用物理内存:106MB,可用页文件大小:399MB,可用虚拟内存:2021MB。
(2)当调用VirtualAlloc()函数,系统会分配32MB虚拟内存,调用malloc()函数,系统会分配2MB物理内存,输出显示可用物理内存:104MB,可用页文件大小:365MB,可用虚拟内存:1987MB。
(3)当调用VirtualFree()函数,系统释放32MB虚拟内存;调用free()函数,系统释放2MB物理内存,此时系统内存还原为初始(1)状态,既系统的显示可用物理内存:106MB,可用页文件大小:399MB,可用虚拟内存:2021MB。 中。
实验五 动态链接库的建立与调用
一、 实验目的
(1) 理解动态链接库的实现原理。
(2) 掌握Windows系统动态链接库的建立方法。 (3) 掌握Windows环境下动态链接库的调用方法。 二、 实验内容
(1) 在Windows环境下建立一个动态链接库。 (2) 使用隐式调用法调用动态链接库。 (3) 使用显式调用法调用动态链接库。 三、 实验要求
掌握动态链接库建立和调用方法。在WindowsXP+Microsoft Visual C++环境下建立一个动态链接库,并分别使用隐式和显式方式将其调用,从而体会使用动态链接库的优点。
该实验完成了动态链接库的建立和调用。函数Add()和Sub()在动态链接库文件SimpleDll.cpp中,分别完成两个整数的相加和相减。而调用该动态链接库的程序文件是CallDll.cpp 四、参考实验代码
代码(一):
// DLL.cpp : Defines the entry point for the DLL application. //
#include \
extern \extern \BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call, LPVOID lpReserved ) {
return TRUE; }
int Add(int x,int y) { return x+y; //加法定义 }