Visual Studio Community 2013を用いて64ビットバイナリを作成する方法を紹介する.
参照: https://msdn.microsoft.com/ja-jp/library/9yb4317s%28v=vs.120%29.aspx
背景
Unity用ネイティブプラグイン(DLL)は64ビットバイナリとして作成する必要があるため調査.
手順
まずプロジェクトを作成する.http://qiita.com/imura/items/62fe7e09740666a5ea8e を参照.
新しいソリューションプラットフォームダイアログの「新しいプラットフォームを入力または選択してください」メニューから x64 を選択して,OKをクリックする.
この設定でビルドすると64ビットバイナリが生成される.標準的な設定では,プロジェクトのフォルダ直下にx64フォルダが作成され,その中にReleaseとDebugの各フォルダが生成され,それぞれのフォルダに生成された実行ファイルが置かれる.
実行中のプロセスの調査
Process Explorerを使う.
https://technet.microsoft.com/ja-jp/sysinternals/bb896653
実行するとプロセス一覧が表示される.調べたいプロセスの上で右クリックし,Properties... を選択する.Imageタブのやや下部に「Image: 32-bit」あるいは「Image: 64-bit」と表示される.
32ビットバイナリと64ビットバイナリの違い
開発者にとって影響が大きいのは確保できる最大メモリ量であろう.Windowsの場合,32ビットバイナリでは2GBまでという制約がある(LARGEADDRESSAWAREオプションを設定すると3GB超まで増やせる: https://msdn.microsoft.com/ja-jp/library/wz223b1z%28v=vs.120%29.aspx を参照).
int型,long int型,long long int型,ポインタのサイズを比べてみた.
// checksize.cpp
#include <iostream>
int main(int argc, char **argv)
{
int i;
std::cout << "sizeof(int) = " << sizeof(i) << std::endl;
long int li;
std::cout << "sizeof(long int) = " << sizeof(li) << std::endl;
long long int lli;
std::cout << "sizeof(long long int) = " << sizeof(lli) << std::endl;
int *p;
std::cout << "sizeof(int *) = " << sizeof(p) << std::endl;
return 0;
}
32ビットの結果
sizeof(int) = 4
sizeof(long int) = 4
sizeof(long long int) = 8
sizeof(int *) = 4
64ビットの結果
sizeof(int) = 4
sizeof(long int) = 4
sizeof(long long int) = 8
sizeof(int *) = 8