litediary

<4月 2005年05月 6月>
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31     
過去の記事
2015年04月  2015年01月  2014年09月  2014年07月  2014年02月  2013年12月  2013年01月  2012年12月  2012年11月  2012年07月  2012年06月  2012年05月  2012年04月  2012年03月  2012年02月  2012年01月  2011年12月  2011年11月  2011年10月  2011年08月  2011年07月  2011年06月  2011年05月  2011年04月  2011年03月  2011年01月  2010年12月  2010年11月  2010年10月  2010年09月  2010年08月  2010年07月  2010年06月  2010年04月  2010年03月  2010年02月  2010年01月  2009年12月  2009年11月  2009年10月  2009年09月  2009年08月  2009年07月  2009年06月  2009年05月  2009年04月  2009年03月  2009年02月  2009年01月  2008年12月  2008年11月  2008年10月  2008年09月  2008年08月  2008年07月  2008年06月  2008年05月  2008年04月  2008年03月  2008年02月  2008年01月  2007年12月  2007年11月  2007年10月  2007年09月  2007年08月  2007年07月  2007年06月  2007年05月  2007年04月  2007年03月  2007年02月  2006年12月  2006年11月  2006年10月  2006年09月  2006年08月  2006年07月  2006年06月  2006年05月  2006年04月  2006年03月  2006年02月  2006年01月  2005年12月  2005年11月  2005年10月  2005年09月  2005年08月  2005年07月  2005年06月  2005年05月  2005年04月  2005年03月  2005年02月  2005年01月  2004年12月  2004年11月  2004年10月  2004年09月  2004年08月  2004年07月  2004年06月  2004年05月  2004年04月  2004年03月  2004年02月 
Windowsで2GB以上のメモリを利用する05/05/23 17:30
今の32bitWindowsではメモリアドレスを32bitで表現する。
32bit→2^32B=2^2GB=4GB
これが32bitポインタで表現できる最大のアドレスになるが、
デフォルトではこの4GBをカーネルとユーザーに1:1に分けて使用するため、
アプリケーションが利用できるメモリは2GBまでになる。

カーネル:ユーザーを1:3にすることで3GBまでメモリを使えるようにする方法がある
ブートドライブのルートのboot.iniの
multi(0)disk(0)rdisk(0)partition(1)\WINNT="???" /fastdetect
のような行に/3GBを追加して
multi(0)disk(0)rdisk(0)partition(1)\WINNT="???" /fastdetect /3GB
とすると有効になる
ただし/3GBスイッチが有効なのは次のOSのみ?

Windows XP Professional
Windows Server 2003
Windows Server 2003, Enterprise Edition
Windows Server 2003, Datacenter Edition
Windows 2000 Advanced Server
Windows 2000 Datacenter Server
Windows NT Server 4.0, Enterprise Edition
WinXPSP1で/3GBスイッチを使用すると起動できなくなる可能性がある

さらに3GBまでのアドレスを使うにはプログラムヘッダにIMAGE_FILE_LARGE_ADDRESS_AWAREをセットする必要がある
(このフラグは/3GBが無効・/3GB非対応のバージョンのOSの場合は無視される?)
リンク時にオプションで/LARGEADDRESSAWAREを指定するとこのフラグがセットできる。
すでに実行ファイルになってるorリンカにLARGEADDRESSAWAREのオプションが無い場合、
NT Server/EのCDにはimagecfg.exeなるツールがあって簡単にこのフラグをセットできるらしいが、
XPとWin2kSVにはなかったのでバイナリエディタでセットする。


実行ファイルの
0x3cにPEヘッダのアドレスがあり、PEヘッダから0x16にCharacteristicsフラグがある
0x3cにあるアドレス+0x16のフラグに0x20をORしてやるとIMAGE_FILE_LARGE_ADDRESS_AWAREを指定でる。

例えば0x3C D8なら0xD8+0x16=0xEEがCharacteristicsフラグ
0xEE 0Fなら0x20をorして0xEE 2Fに書き換えればIMAGE_FILE_LARGE_ADDRESS_AWAREが有効になる

WinXPProSP2で実際に動かしてみると
VC++でmallocを繰り返すと/3GB+IMAGE_FILE_LARGE_ADDRESS_AWAREが無効の場合1915MB、有効の場合2882MB
VC#+.NET Frameworkでnewを繰り返すと無効の場合1590MB、有効の場合2520MB
のメモリが確保できた

結局1GBも変わらないのででかいメモリを使うなら64bitに移行しろと…


参考:
http://www.microsoft.com/whdc/system/platform/server/PAE/PAEmem.mspx
http://www.interq.or.jp/chubu/r6/reasm/intro.html

minibbs - テスト稼動中
creeper2012/05/03 01:28
.jpからもきてるんか…
creeper2012/05/02 10:52
誰も書き込まないのにSPAMばっかりくるようになったのでhost名制限かけました。
基本的に逆引きできて*.jpにならないと弾きます
wataru2010/12/01 11:43
GT5俺がかわりにやっといてあげますよ。
q2010/12/01 10:35
消化不良すぎ
2010/10/30 01:03
netbeansだとmakeファイル使う機会があるかもしれませんね
2010/10/05 06:04
なに書き込み不可能とか直しちゃってるのこわい
creeper2010/10/04 02:58
長いことコメント書き込み不可能になってた。直しました。
ao 2007/09/30 10:54
お、良いねぃ
creeper2007/09/16 05:18
そこまで詳しくなかったので調べてみた。Wikipedia万歳
なるほど、失敗する6号機まではかぐやと同じ3t強をSBB無しの202で上げてたんですね。
SRB-Aの出力を下げてSBB追加することでとりあえず対応していたと。

今後の予定をみると、次の燃えるのは2010年の金星探査機かー
「超高速インターネット衛星WINDS」は名前には惹かれるけど都心に引きこもってる限り関係ないなー
Wikipediaの予定だとWINDSは2024になってますね。
重量的に、2024か204か新型か…
A責ダッシュ!2007/09/15 10:11
SSB使っての打ち上げって今回が最後じゃなかったかな?
まー、今回のもSRB-Aがもともとの性能を出せてれば2022じゃなくて202で上げられたかもしれないです。LE-7Aの再生長ノズルはこなれてきたようなので、元のSRB-Aが復帰すればまたちょっとづつ色々変わっていくんじゃないのでしょうか。H-IIBも控えてますしね。
creeper2007/09/12 05:55
http://lovelove.rabi-en-rose.net/blog.php?n=256

今回はcygwinのgccつかってます。
まぁ、ソース見ての通りこの問題が1:1になるのは自明で、
かつrandの結果は偶数奇数が交互に出るようなこともなく、
おかしな偏りも無かったのでOKということで。