C++ Memory Management
Dorman, Neuberger
McGraw Hill
1994
0-8306-4288-9 (0070178143 1998)
$32.95 (US)






This was a good book for learning some interesting aspects of conventional memory structure. I used it to build an EMS library for allocating and managing large chunks of memory. Although I was able to figure out how to do what i needed, it still seemed to zip through many of the other aspects of EMS and XMS. I was left wondering why they were doing that, and what this or that really did and why. If you want a good reference for EMS and XMS i think this would do the trick. If you want a good book to learn how it all works, i'd look somewhere else. It covers XMS and EMS 3.0, 3.2, and 4.0. It also has a lot of code included that shows the uses of most of the memory functions including a virtual memory manager that uses XMS, EMS and HD space. This is now just a dust collector since i've switched to using Virtual Memory in Protected Mode, but thats a different story :).


What you need to use this book								VI

Introduction										VII

Memory Management overview

	Using expanded memory for dynamic memory allocation				4
	Using extended memory for dynamic memory allocation				6
	Using the hard disk for dynamic memory allocation				7
	Summary										7

Understanding Memory Control Blocks

	Preparatory memory management routines						11
	Writing a Memory Chain display utility program					12
	Summary										23

EMS 3.0 and 3.2

	About the EMS programmer's interface						25
	EMS 3.0 demonstration programs							26
	The EMS 3.0 and 3.2 interface							46
	C++ interface functions								64
	Initialize EMS									64
	Get the EMM status								64
	Get the page frame address							66
	Get the number of free EMS Ppages						67
	Allocati EMS handle and pages							68
	Map an expanded memory page							70
	Free a handel and the asociated EMS pages					71
	Get the EMS version number							72
	Save the contents of page map registers						74

 EMS 4.0

	EMS 4.0 enhancements								89
	EMS 4.0 demonstration programs							90
	C++ interface functions								115
	Save a partial page map								115
	Restore a partial page map							117
	Get the size of partial page map information					118
	Map multiple pages by number							119
	Map multiple page by address							121
	Reallocate pages for handle							123
	Get handle attribute								124
	Set handle attribute								125
	Get attribute capabilities							126
	Get handle name									128
	Set handle name									130
	Get all handle names								131
	Search for handle name								132
	Get total number of handles							134
	Map pages by number and jump							135
	Map pages by segment and jump							137
	Map pages by number and call							138
	Map pages by segment and call							140
	Get stack space for map and call						141
	Move a memory region								143
	Swap memory regions								144
	Get addresses of mappable pages							146
	Get number of mappable pages							148
	Get hardware configuration 							149
	Get number of raw pages								150
	Allocate handle and standard pages						152
	Allocate handle and raw pages							153
	Prepare EMM for warm boot							154
	EMS 4.0 operating system only functions						156
	Summary										156

Extended Memroy Specifications (XMS) 2.0

	An overview of the XMS interface						158
	XMS 2.0 demonstration programs							159
	The XMS interface classes							184
	The XMS assembly language definition file					193
	Intilize the XMS interface							195
	Get the XMS version number							197
	Allocate the HMA (High Memory Area)						198
	Release the HMA									200
	Enable the global A20 line							201
	Desable the global A20 line							202
	Get the current A20 line state							203
	Get amount of free extended memory						204
	Allocating an extended memory block						206
	Free an extended memroy block							207
	Copy an extended memory block							208
	Lock an extended memory block							210
	Unlock an extended memory bock							211
	Get extended memory block information						212
	Resize an extended memory block							214
	Allocate an Upper Memory Block(UMB)						215
	Release an UMB									217
	Move raw XMS memory								218
	XMS function error reporting 							220
	Summary										220

The Virtual Memory Manager

	An overview of the Virtual memory Manager					221
	Overview of the VMM's architecture						222
	Initialize the VMM								224
	Shut down the VMM								224
	Allocate a VMM block								224
	Free a previously allocated VMM block						225
	Wrie a VMM ara for reading and wirtging						225
	Unwire a VMM page								225
	VMM demonstration programs							226
	The complete VMM source code listings						232
	Summary										288

Epilogue										289
Index											291