頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


C言語で配列を宣言するとどこにメモリが確保されるの?

C言語の配列ってどう宣言すればいいんだろう、ってお話だよ。

iPhoneアプリを作ってるけど、ここではNS(Mutable)Arrayは置いといてちょうだい。

データの数がnData個使う場合、
float array[nData];//(A)
ってな感じでいいよね。

それから
float *array = calloc(nData , sizeof(float));//(B)
みたいにしてもいいよね。

あまり真剣に双方なにが違うのか考えなかったんだけど、(A)の方はスタック領域に、(B)ではヒープ領域に保存されるらしいんだ。
配列の場合はどちらもヒープ領域で扱われるのかと思ってたらどうも間違いだったみたい。

[iPhone][thread] iPhoneでのスタックサイズ - Ni chicha, ni limona - 平均から抜けられない僕 - iPhoneアプリ開発グループ
↑iPhone実機だとメインスレッドでスタックサイズは1MB。
1MBならきっと余裕あるんだろうな、と思って計算すると案外俺様のアプリで下手すると全部使っちゃうかもしれない。
あ、俺様、じゃないよ、俺だな。最近ウチの息子がアンパンマンが大好きでさ、自分のことを「俺様」って言うんだ。ちなみにそれはバイキンマンのマネなんだけどね。

じゃあ安全みてBの方法でヒープ使えばいいだろというとどうやらBの方がスピードが遅いという記述があるんだ。
Bの方は住所の住所から見るからそうかもしれないなって思うんだけど、メモリとの兼ね合いで要チューニングってことになるんだろうな。


画像処理関連アプリだとうっかりスタックオーバーフローなんてやっちゃいそうだから注意しないといけないかも。
そう言えば、わざとスタックオーバーフローさせて落ちても"EXC_BAD_ACCESS"とかしか出てくれないみたいでさ、スタックサイズうんぬんを知らないとなんで落ちるのかさっぱりわからない、なんてことになるかも、、、実際、いつか俺がやっちゃいそうな気がするんだよ。Google先生に聞いてこの記事を見つけて苦笑するんだ、書いてたじゃねーか、おばかー!って。ちなみに「おばかー!」って言うのはドキンちゃんだよ。

<< 読書量管理サイト「読書メーター」に登録してみた  TopPage  不具合を教えてくれるユーザーさんに感謝 >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/674-57397e1c




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad