質問: 1;`とすればどの環境でも毎回、アドレスは同一になります。 ひょっとするとこのような質問はstackoverflow的には好ましくないのかもしれません......。 **回答を得た後の追記** ***質問する時点では知らなかったのですが、セキュリティ対策がなしの設定ではどのコンパイラ(もっと正確にいうと処理系)も毎回同じアドレスになる、というのが普通です。Cygwin以外が本当は通常と異なる動きをしていました(ASLR等のセキュリティ対策がON)*** また、私自身の質問が混乱した記述になっていますが、同じアドレスから通常は始まる理由はアドレス空間によると、 > > ユーザ空間または「ユーザー仮想アドレス空間」はユーザープロセスの動作するアドレス空間である。コンピュータシステム上で動作する各プロセスは、それに対応するデータとコードを持ち、実行中にはそれらがユーザ空間上にロードされる。ユーザ空間はプロセス毎に割り当てられ、それぞれのアドレス範囲は同じである。従って、仮想記憶方式のオペレーティングシステムでは、ユーザープログラムのコードやデータは同じアドレスから開始されるようになっていることが多い。 > > > とのことです。
回答: お二方の回答を受けて、ASLR有効化、無効化の方法を書きます。 最近のOSはどれもたいてい既定でASLRが有効になっているようです。 CygwinのGCCでASLRを有効化する方法です。 ``` $ g++ -Wl,--dynamicbase -Wl,-pie -o foo.exe foo.cpp ``` ここが参考になりました。 また、逆に通常のLinuxでASLRを無効化する方法は既にargusさんが記載済みです。 MSVCでASLRを無効化する場合は次のようにします。 ``` プロジェクトのプロパティページ > 構成プロパティ > リンカー > 詳細設定 > ランダム化されたベースアドレス いいえ (/DYNAMICBASE:NO) ``` に設定したうえでコンパイルします。