32位系统内存(win732位突破4g限制)
32位系统内存
这是理论上的限制。通过PAE技术,32位的OS可以使用超过4GB的物理内存。简单来说就是*页表变四级,同时页表的宽度变成64bit.实际上,对于操作系统制造商来说,这个功能的需求来的远比用户内存普遍突破4GB更早。Windows2000A*ancedServer使用PAE技术就能支持8GB的物理内存。
32位系统指操作系统内部的地址寄存器只有32位宽。内存中最小的寻址单元是1byte;32位二进制整数能表示4,294,967,296个不同的byte.这样乘起来就是4GB的内存。
结构体A中包含一个4字节的int数据,一个1字节char数据和一个2字节short数据;B也一样。按理说A和B大小应该都是7字节。之所以出现上述结果,就是因为编译器要对数据成员在空间上进行对齐。
其中,最高有效位(MSB,MostSignificantByte)0x0A存储在最低的内存地址处。下个字节0x0B存在后面的地址处。同时,最高的16bit单元0x0A0B存储在低位。
可以看出都是对齐到4字节。并且前面的char和short并没有被凑在一起(成4字节),这和结构体内的处理是不同的。
win732位突破4g限制
VC/C++中的编译选项有/Zp[1|2|4|8|16],/Zpn表示以n字节边界对齐。n字节边界对齐是指一个成员的地址必须安排在成员的尺寸的整数倍地址上或者是n的整数倍地址上,取它们中的最小值。亦即:
其实,除了结构体之外,整个程序在给每个变量进行内存分配时都会遵循对齐机制,也都会产生内存空间的浪费。但我们要知道,这种浪费是值得的,因为它换来的是效率的提高。
编译器将未对齐的成员向后移,将每一个都成员对齐到自然边界上,从而也导致整个结构的尺寸变大。尽管会牺牲一点空间(成员之间有空洞),但提高了性能。
在缺省情况下,C编译器为每一个变量或是数据单元按其自然对界条件分配空间。一般地,可以通过下面的方法来改变缺省的对界条件:
因为位域a定义的类型signedchar是有符号数,所以尽管a只有1位,仍要进行符号扩展。1做为补码存在,对应原码-1。
windows7支持多大内存
伯克利socketAPI定义了一组转换函数,用于16和32位整数在网络序和主机字节序之间的转换。Htonl、htons用于主机序转换到网络序;ntohl、ntohs用于网络序转换到本机序。
1)数据类型自身的对齐值:就是基本数据类型的自身对齐值,比如char类型的自身对齐值为1字节,int类型的自身对齐值为4字节。
3)位域以定义的类型为单位,且位域的长度不能够超过所定义类型的长度。例如定义inta:33是不允许的。
字、双字和四字在自然边界上不需要在内存中对齐。(对于字、双字和四字来说,自然边界分别是偶数地址,可以被4整除的地址,和可以被8整除的地址。)