_alloca/関連ログ


_alloca

_alloca/関連ログ

oslog:1039237412

600 :Be名無しさん :03/10/17 01:24
しかしこないだム板で聞いたところ 
gccにはページサイズが足りないと勝手にallocaを呼んで 
スタックを拡張するという辛い動作があるようでして 
こいつをどーすれば良いのか未だに決めかねているところです。 
例によって手作業で強引に消してしまうか……。 
誰か良い方法知りません?
611 :Be名無しさん :03/10/17 18:10
>>600 
ん? 
勝手にallocaするコードなんて吐かないぞ。 
allocaしてスタックが足りなくなったときに、 
OSが空いてるページをマップしてくれることを期待してるの間違いじゃないか? 

ちうかallocaだったらmalloc/freeに置き換えられるだろう。 
気をつけないとメモリリークしまくりだけど。
614 :Be名無しさん :03/10/17 21:29
>>611 
んじゃ微妙にallocaと別なんだろうか。 
zlibのgzio.cなんかコンパイルすると出るんスよ。 
gzprintfだったかという関数の頭の方で__allocaが呼ばれますた。 
でもCソース中で呼んでる形跡は見当たらない。 

ム板での話だと 
void hoge(int size) 
{ 
char buff[size]; 
… 
} 
という状況と、 
ローカル変数領域がページサイズより大きい場合に 
スタックを拡張する為呼ばれるって話だったんですが。 

zlib中の当該の関数については後者だそうです。 
そう言えばGOではlibgcc.aから__allocaを抜き出してたな。
615 :Be名無しさん :03/10/17 21:39
allocaを勘違いしとるな 
616 :Be名無しさん :03/10/17 22:21
>>615 
そこで止めず教えて下せえ。 
NWSLが__allocaの未定義参照で文句を言ってくるのですよ。
618 :611 :03/10/17 22:49
>>614 
ああ可変長配列か。そんなのもあったねえ。 
buildin_alloca使うようにすればいいんではないかと。 

ちなみにその状況なら常にallocaを使うように展開されるはず。 
まあmallocにするのがportableだと思うが。 
619 :Be名無しさん :03/10/17 23:37
>>618 
>buildin_alloca使うようにすればいいんではないかと。 
そうしたかったのですがやり方が分かんねえです。 
#define alloca __builtin_alloca してるのですが、 
相変わらず普通に__alloca呼んじまいます。 
ソース中で明示的に呼ぶ場合以外には適用されない機能なんですかねー。(汗 
単純に呼ぶ関数を置き換えるマクロみたいに見えるし。 

どうせ削るくらいならダミーで何もしないalloca()作って 
NWSLを誤魔化しておいても問題無いかなあ。 
駄目なら最終手段で、ローカル変数をグローバルへ移しちゃうとか。 
どちらにしても乱暴な対応だ……。 
622 :611 :03/10/18 02:13
>>619 
明示的に禁止しなければbuiltin使ってくれると思っていたが… 
-fbuiltin-functions付けてコンパイルしてみるとか。 

PECOFFの特殊事情はよくわからんけど
623 :Be名無しさん :03/10/18 07:56
>>622 
>-fbuiltin-functions 
それでもやっぱ駄目でした。 
組み込みallocaへの置き換えをするステップが 
allocaを自動挿入するステップの前にあるのですかね。 
NWSOSのスタック自動伸長ってよく分からないけど、 
放っておいてもalloca使わずに済むようなものなのかな? 
663 :Be名無しさん :03/10/26 00:50
>>600 
alloca()が普通のallocaで、__allocaは元は_alloca()であり、 
要するに既に組み込みallocaを使おうとしているとか。 

まあlibgccの_allocaをリンクしてやるのが無難か。 
普通-lgccでやるんだろうが、この場合リンカがNWSLになるからな。 
664 :Be名無しさん :03/10/26 02:15
何も考えず手持ちのlibgcc.aをリンクしようとしたら 
NWSLに異常なCOFFライブラリだと文句を言われてしまったので、 
取り敢えず__allocaを含む_chkstk.oを単体でリンクしています。 
671 :670 :03/10/29 02:00
試しに移植中のgrepでやってみました。 >djgpp 
MinGW程度には使えてるっぽいです。 
MinGWで作った物とほぼ同様に動作します。 
しかも何故かリンク時に__allocaの未定義参照が出ません。 

oslog:1083380404

706 : ◆nl7ClMRWE6 :04/05/28 19:08
gccでC++出来たー。 
VC用クロス開発キットのmain.cppで確認。 
.defから.endefの擬似命令を全部削除してnewとdelete定義して 
例外とRTTI外してコンパイルするだけ。 
取り敢えず__mainは空。__allocaにはlibgccの_chkstkを試しに使ってる。 
あとリンカスクリプトで静的コンストラクタとデストラクタのリスト取らないとな。 
まあ今は俺使わないから良いや。
989 : ◆nl7ClMRWE6 :04/06/04 15:41
gccで自動挿入される__allocaはスタックの拡張の為に呼ばれるらしいから、 
ページ例外取って自動で伸張してるNWSOSでは不要かも。 
ダミーを置くか、擬似命令削除の際に潰せば良いか。 
djgppで問題出ないって事はビルド時のconfigでどうにか出来るんだろうから、 
本当はNWSOS用にビルドする方向で考えるのが自然だろうな。

MENU

now: 1

リンク


最新の20件
2018-05-03 2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 2710, today: 1, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:00 (3734d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.049 sec.