|
一个内存检查的例程如下:
- for(i = 0; i < NUM_MEM_AREAS; i++)
- memory_map[i].used = 0;
-
- /* first write a 0 to all memory locations */
- for(addr = MEM_START; addr < MEM_END; addr += PAGE_SIZE)
- * (u32 *)addr = 0;
- for(i = 0, addr = MEM_START; addr < MEM_END; addr += PAGE_SIZE) {
- if ( current memory page isnot a valid ram page) {
- /* no RAM here */
- if(memory_map[i].used )
- i++;
- continue;
- }
-
- /*
- * 当前页已经是一个被映射到 RAM 的有效地址范围
- * 但是还要看看当前页是否只是 4GB 地址空间中某个地址页的别名?
- */
- [color=#FF0000]if(* (u32 *)addr != 0)[/color] { /* alias? */
- /* 这个内存页是 4GB 地址空间中某个地址页的别名 */
- if ( memory_map[i].used )
- i++;
- continue;
- }
-
- /*
- * 当前页已经是一个被映射到 RAM 的有效地址范围
- * 而且它也不是 4GB 地址空间中某个地址页的别名。
- */
- if (memory_map[i].used == 0) {
- memory_map[i].start = addr;
- memory_map[i].size = PAGE_SIZE;
- memory_map[i].used = 1;
- } else {
- memory_map[i].size += PAGE_SIZE;
- }
- } /* end of for (…) */
复制代码
为什么(* (u32 *)addr != 0就是说明当前地址页是某个地址页的别名?
|
|