size_of(int)
これでの戻り値はsize_tになります。
size_tは
#ifndef _SIZE_T_DEFINED
#ifdef _WIN64
typedef unsigned __int64 size_t;
#else
typedef __w64 unsigned int size_t;
#endif // !_WIN64
#define _SIZE_T_DEFINED
#endif // !_SIZE_T_DEFINED
こんな感じで定義されています。
64bitならunsignedの64bit, 32bitならunsignedの32bit
CTSからunsignedを除いた(正式サポート対象外になるよという意味)のはunsignedをサポートしている言語が本当に少ないから・・・
Marshal.AllocHGlobal っていう.NETのメモリ確保するのは内部でLocalAllocを読んでいるにもかかわらずint版しかない・・・
uint版があってもいいのに・・・本当にこれでよかったんだろうか・・・
#99%はいいとは思うけど残り1%がわからない。
あと、size_tからintに渡すときに33bitも桁落ちさせていいのだろうか・・・・
Marshal.AllocHGlobal
http://msdn2.microsoft.com/ja-jp/library/system.runtime.interopservices.marshal.allochglobal(d=ide).aspx
LocalAlloc
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_localalloc.htm