もきもき3D

アクセスカウンタ

zoom RSS alloca() ('A`)

<<   作成日時 : 2008/12/19 06:51   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

まずalloca()があった。
次に_alloca()があった。
ANSI C99では関数内の任意位置での変数宣言が可能になった。
MSVCなんかは_alloca()をそのまま扱う?
MinGWでは__alloca()に置き換えて扱う?

_allocal()をgccに掛けると__alloca()になる。
コンパイルで -mno-stack-arg-probe を付けると_alloca()は__alloca()にならず別手段に置き換わる。
_alloca()でなくvar[]で確保すると当然_alloca()の出る幕は無い。
任意位置でのvar[]宣言でも-mno-stack-arg-probeが無いと__alloca()に置き換わるっぽい。

3種のアセンブラソースは該当箇所付近で違う。
_alloca()時、オプション無し「call __alloca()」、オプション有り「subl %eax, %esp」
var[]時ではオプション有りに加えてmovl %esp, -24(%ebp)の様なスタック操作(?)が出てきて根本的(?)に違う状態にあるっぽい(__alloca化されない場合)。

可変長だけどサイズが予測可能でスタック(4KBと仮定)に収まる保証がある場合はvar[]で扱った方が無難?
4KB以内を保証出来ない場合はオプション有りで__alloca()に任せる方が無難?

MinGW/GCCのソースを読めという話に帰着しそうだけど('A`)ウーン
てか、見てみたけどわけわかんねぇ('A`)

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
alloca() ('A`) もきもき3D/BIGLOBEウェブリブログ
文字サイズ:       閉じる