
miyuriの日記: 2[GiB]くらいの壁 7
日記 by
miyuri
Windows 7 X64 SP1, x86な実行ファイル, VirtualAlloc。
bcdedit /set IncreaseUserVa 3072
メモリ確保の限界は、約2[GiB]。
気が利かないね。
(´・ω・`)
Windows 7 X64 SP1, x86な実行ファイル, VirtualAlloc。
bcdedit /set IncreaseUserVa 3072
メモリ確保の限界は、約2[GiB]。
気が利かないね。
(´・ω・`)
皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー
32bitsバイナリだからかも。 (スコア:1)
32bits窓では4GiBoverなメモリを使うための領域確保のシステムコールは別になってるはず(それが原因で32bits窓はPAEがonでも4GiBoverメモリを事実上使えない)だけど、それとは違うのかな?
Re:32bitsバイナリだからかも。 (スコア:2)
Address Windowing Extensionsなんていう面倒なモノは考えない方向で。
32[bit]なOSとの互換性を考えるなら、普通に3[GiB]までは使えるだろうと思ったけど使えなくて、なんだかなーと。
Re:32bitsバイナリだからかも。 (スコア:1)
窓の32bits互換モードはなんとなくx32の配置になってるように思える。
x32は符号付きで解釈されるのでアドレス空間が真ん中で分断されてるのよな。
# 単なる互換なら32bitsセグメント使えばいいだけなのでそんな必要はないはずなんだが...。
いろいろひどい (スコア:0)
・IncreaseUserVaはx64には関係ない。そんなもの指定しなくてもデフォルトで4GiB使える
・ただしアプリが/LARGEADDRESSAWAREを指定してリンクされていなかったらx86+IncreaseUserVaだろうがx64だろうが2GiBまでしか使えない。(これは2GiB以上のメモリでテストされていないアプリが整数オーバーフローを起こす可能性があるため)
Re:いろいろひどい (スコア:2)
ありがとう。
/LARGEADDRESSAWARE
で約4[GB]まで確保できるのを確認したよ。
連続メモリを確保しようとしていませんか (スコア:0)
2GiBの末尾付近にシステムDLLが居座っていてそこでアドレス空間が分断されるから連続メモリは事実上2GiBまでしか確保できないよ
Re:連続メモリを確保しようとしていませんか (スコア:2)
とりあえず1[MiB]ずつで。
#4k決め打ちやSYSTEM_INFO::dwPageSizeの方がいいだろうけど