CPU位于IA32-E模式(64位模式,2MB分页)
以下代码将内存管理结构的结束地址对齐并赋值给memory_management_struct.end_of_struct ,memory_management_struct.zones_struct是一个管理结构的起始地址,memory_management_struct.zones_length是结构总长(long的倍数),想知道如下代码如何做到内存对齐?如何推导?
我不太明白为什么要乘以32而不是64,按照我的理解应该是64因为一个long占8个字节也就是64个比特;
之前问了几个关于内存对齐的代码,现在仍然感觉看得不是特别明白,想知道如何看懂这类代码?
memory_management_struct.end_of_struct = (unsigned long)((unsigned long)memory_management_struct.zones_struct + memory_management_struct.zones_length + sizeof(long) * 32) & ( ~ (sizeof(long) - 1)); ////need a blank to separate memory_management_struct