オーバースペック

基本的にJavaとそれを取り巻く言語*1の知識しかないんですが
職場の人にいきなりmalloc関数について
相談を持ちかけられてしまいました。


mallocについてはこちらをご覧ください。
正直、動的にメモリ配置して
そこで色々できるってこと以外は
自分もよくわかってません。
でも相談を持ちかけられたなら一応聞くだけ聞いておこうと。
今後の知識の種になるかもしれないし。
ってかわかりもしないのにメモリの話とか萌える燃えるよね。
わかったふりの名ばかりエンジニア乙。


以下相談内容!
malloc戻り値が負の値で戻ってくるんだけど…(´ω`)
へ…(゚Д゚)?
なんでだろうね…(´ω`)?


mallocの戻り値って確保したメモリの先頭アドレスのはず。
戻り値がいきなりアンダーってどういうことなのwwww!?
たとえば、確保したメモリを逆順に捜査した場合は
アンダー出るのはわかるんですが…w
戻り値でいきなりアンダーって…w


でもお客さんの知識が高くて、その辺は調査されてました。
OSはSun10。CPUは64bit、メモリは8Gのサーバという環境らしく、
どうも…32bitコンパイラコンパイルしたものを動かしたらしいのです。
で、64bitコンパイラコンパイルするとエラーはでない…と…w


なんだ…原因解決できてますやん(゚∀゚)w
いや…んでこれをなんとか32bitでやりたいんだけど(´ω`)w


おおう。これは中々…。
環境を触ったわけではないので
予測でしかお話できなかったのですが
多分、本来4Gまでのアドレスしか取れないところを
8Gのアドレスまで取れてしまうので
循環してマイナス*2になってるんじゃないかな…と予測。
と、言うことは偶発的に正の値を返すこともあるんじゃね?的な
感じで意見だけを述べておきました。

追記
実はそうじゃなくて32bitのところに
64bitの前側だか、後側だかが入ってくるらしいです。
つまり入ってくる値はめちゃめちゃな値。


仕組み的には負の値が戻ってくる限りは何回もリトライして…
正の値が帰ってきたら正常処理を入れる的な処理になるのかなぁ…?

追記
つまり、上記の理由でこの案も使えないということですね…。
どうすればいいんだろう…。


オーバースペックってもはや死語*3だと思ってたけど以外や以外。
こんなところででてくるんですね。

*1:HTML、SQLJavaScript

*2:符号が埋まってしまっているのかも?

*3:昔は早すぎて逝っちゃうPCとかなかったですか?95辺らへん。