第四章到第九章讲了一些UI的操作,还有时间及绘图,最近一直在研究写一个文本编辑器就好久没发文章了,编辑器也快写完了,之后还准备写个文件搜索器,练习数据库和多线程。
第十章是文件操作和内存管理,写文本编辑器也就用到这暂时,现在把这一章的笔记贴出来。我发现保存成rtf格式,在代码片中,所有的缩进就都正常了。
10
10.1.1
--------标准内存管理函数- |-------------------------
----堆管理函数-----------|---内存映射文件函数---
虚拟内存管理函数--------- |-------------------------
------------------Windows内存管理器-----------------
---------------物理内存-------交换文件-------------
虚拟内存管理函数:保留提交释放虚拟内存
堆管理函数:操作所有的默认堆和里面的私有堆
标准内存管理函数:在默认堆内分配和释放内存
内存映射文件函数:把文件映射到内存后,在内存中读写文件
10.1.2
一个进程4GB,高2GB给系统内核使用,低2GB自己用
申请内存前,需要知道现在内存的分配情况
invoke GlobalMemoryStatus, lpBuffer
lpBuffer: MEMORYSTATUS
dwLength dw ? ;本结构长度
dwMemoryLod dw ? ;已用内存百分比
dwTotalPhys dw ? ;物理内存总量
dwAvailPhys dw ? ;可用物理内存
...
调用前先填写dwLength,调用成功后,函数在结构中返回对应的数值
10.1.3
标准内存管理函数(默认堆中)
GlobalAlloc
GlobalFree
GlobalReAlloc
GlobalLock
GlobalUnlock
GlobalDiscard
GlobalFlags
GlobalHandle
GlobalSize
固定的内存块
//申请
invoke GlobalAlloc, GMEM_FIXED or GMEM_ZEROINT, dwSizeInByte
//申请成功返回内存指针,不成功返回NULL
.if eax
mov lpMemory, eax
.endif
//释放
invoke GlobalFree, lpMemory
//释放成功返回NULL,不成功返回lpMemory
//手动释放防止内存泄漏,程序结束后系统自动释放
//修改大小
invoke GlobalReAlloc, lpMemory, dwSizeInByte, GMEM_ZEROINT or GMEM_MOVABLE
//申请成功返回内存指针,不成功返回NULL
//原空间已有数据会复制到新空间