首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

Windows API的所有参数和返回值sizeof均为4的原因?解决方案

2012-02-17 
Windows API的所有参数和返回值sizeof均为4的原因?仅仅是为了压栈方便?反正C里面看不出来,在win32汇编中,s

Windows API的所有参数和返回值sizeof均为4的原因?
仅仅是为了压栈方便?

反正C里面看不出来,在win32汇编中,sizeof相同带来的便利非常大

[解决办法]
压栈方便,内存对齐也方便
[解决办法]
找了下, fastcall , cdecl , intrinsic 啥的都不算, 几分钟还是找到不少 stdcall 的...

VerSetConditionMask RtlVerifyVersionInfo KeQueryInterruptTime KeQueryPerformanceCounter RtlFindRange

Int64ShllMod32 Int32x32To64 这些看着就应该传/返回64B的函数就不算了...

[解决办法]
整形提升。
调用函数时,所有比int或unsigned int小的类型都要提升为int或unsigned int。
所以用byte,short不能节省栈,还增加了一次与操作(为了排除栈上的无用位的干扰),没有任何好处。
int64一般用不到这么大的范围。
所以int是最合适的。

也有例外,比如RegisterClass就返回ATOM。ATOM就是unsigned short。
还有GetFileSize,他把返回值低32位放eax,高32位放指定的内存,很是别扭。其实放在edx,eax中多好,正好线程一个int64。

热点排行