从http://blog.youkuaiyun.com/trcj1/archive/2009/08/29/4496935.aspx摘取了一部分
字节对齐
#program pack(x) //x=1,2,4,8,16...默认为8
每当一个结构的成员变量要定位时,取该成员变量的长度与x中间的最小值作为标准,该成员变量的偏移量(offset)必须能够被该值整除。当所有的成员都定位完成后,再次取该结构体中最宽成员的长度与x中间的最小值作为标准,整个结构体的大小必须能够被该值整除。
.NET环境编程tip
任何.NET环境下编写的程序都需要安装.NET框架才能运行(注意默认情况下C++语言编写的程序不需要.NET框架的CLR即运行,通过制定一个新的开关,C++编译器也能够产生出需要CLR才能执行的托管模块),我们可以通过再%windir%/system32目录下查找MSCorEE.dll文件来判断该机器是否安装了.NET框架。如果存在则证明已安装。如果想确定安装了哪些版本的.NET框架,可以查看如下注册表键下的子键:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/.NETFramework/policy
C VS .NET
C语言运行时堆分配内存基于链表,.NET CLR托管堆分配则基于连续的内存块,故.NET分配对象要比C快得多;
.NET在垃圾回收后要用到memcpy函数压缩托管堆,所以会给应用程序带来不小的性能损伤,其性能比C运行时的堆的性能低。
Win32平台下的微软C编译器(cl.exe for 80x86)在默认情况下采用如下的对齐规则
任何基本数据类型T的对齐模数就是T的大小,即sizeof(T)。比如对于double类型(8字节),就要求该类型数据的地址总是8的倍数,而char类型数据(1字节)则可以从任何一个地址开始。Linux下的GCC奉行的是另外一套规则(在资料中查得,并未验证,如错误请指正):任何2字节大小(包括单字节吗?)的数据类型(比如short)的对齐模数是2,而其它所有超过2字节的数据类型(比如long,double)都以4为对齐模数。
猜测:
DX的版本检查是否可以通过在%windir%/system32下查找某个特殊的dll来进实现呢?
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/trcj1/archive/2009/08/29/4496935.aspx