すべてがFになる

読み始めた.
数年前にも人に借りて読んだことはあったのでこの話に関してはオチは知っているんだけど,
シリーズ全部は読んでないので今度は全巻読みたいと思っている.


staticで宣言する理由

金曜日にコンピュータプログラミングのTAやってて,
メイン関数の中に「大きな配列を宣言するときにはstaticを使うこと」
とかコメントで書いてあった.

C言語というかメモリ周りの話には全く弱くてわからなかったので先生に聞いてみた.
staticなしで宣言した変数はスタック領域からメモリを確保する.
スタック領域は大きさが決まっているので(コンパイル時に指定することは可能)
大きすぎるとスタックオーバーフローするから,という話だった.
staticをつけるとヒープ(スタック以外の領域)からメモリを確保するのでその問題はないと.
ほかグローバル変数のようなずっと残る変数や,mallocで確保した場合にもヒープから確保される.

たとえば,こんなコードを書くとスタックオーバーフローでセグフォして落ちる.

1
2
3
4
5
6
7
#include <stdio.h>
int main()
{
char a[8192 * 1024];
printf("hoge\n");
}

スタックのサイズはシェルでulimit -sってやるとわかる.

勉強になった.





Kindle

Kindle PaperWhiteほしい.
iPhoneのKindleアプリで本読み始めてから本買う頻度が高い.
iPhone4Sで本読むのは画面サイズ的に辛いんだよなぁ...