Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Visual Studio 2013で64ビットバイナリを作成する

More than 5 years have passed since last update.

Visual Studio Community 2013を用いて64ビットバイナリを作成する方法を紹介する.
参照: https://msdn.microsoft.com/ja-jp/library/9yb4317s%28v=vs.120%29.aspx

背景

Unity用ネイティブプラグイン(DLL)は64ビットバイナリとして作成する必要があるため調査.

手順

  1. まずプロジェクトを作成する.http://qiita.com/imura/items/62fe7e09740666a5ea8e を参照.

  2. プロジェクトのプロパティを開く.
    2015-08-02_10h32_42.png

  3. 構成マネージャーを開く.
    2015-08-02_10h37_27.png

  4. アクティブソリューションプラットフォームのプルダウンメニューから<新規作成...>を選択.
    2015-08-02_10h39_10.png

  5. 新しいソリューションプラットフォームダイアログの「新しいプラットフォームを入力または選択してください」メニューから x64 を選択して,OKをクリックする.
    2015-08-02_10h41_10.png

  6. 構成マネージャーの設定は以下のようになる.
    2015-08-02_10h42_59.png

  7. この設定でビルドすると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
// 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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away