2012-04-21 12 views
4

私のアプリ起動時にmallocでいくらかの領域を割り当てています。私がこの変数に値を設定しないと、このアプリケーションで使用している私のメモリの0%が表示されますが、この変数に値を設定すると、この配列に値を設定する方法でramの使用量が増加します。C malloc、ポピュレート時のメモリ使用量

私の質問は、このスペースが私のアプリの使用済みスペースとしてmallocによって割り当てられていることを示すべきではありません。この変数を設定したときにアプリからRAM使用量が増加するのはなぜですか?

私はUbuntu 10.10 64bitです。

char pack(uint64_t list, char bits, uint64_t *list_compressed, char control, uint64_t *index){ 
uint64_t a, rest; 

if(control == 0){ 
    a = list; 
} 
else{ 
    rest = list >> (64 - control); 

    a = (control == 64 ? list_compressed[*index] : list_compressed[*index] + (list << control)); 

    if(control + bits >= 64){ 
     control = control - 64; 
     //list_compressed[*index] = a; 
     (*index)++; 
     a = rest; 
    } 
} 

//list_compressed[*index] = a; 
control = control + bits; 

return control; 
} 

"malloqued"変数はlist_compressedです。

私がlist_compressed populationのコメントを外すと、ramの使用率が増えます。コメントをつけておくと、使用率は0%になります。

+0

http://en.wikipedia.org/wiki/Virtual_memory –

答えて

6

短答、いいえ。多くのOSでは、mallocを呼び出すと、メモリに直接アクセスするのではなく、アクセスするときだけメモリを割り当てます。 mallocman pageから

:デフォルトでは

、Linuxは楽観的メモリ配置戦略を用いています。 これは、malloc()がNULL以外の値を返したときに、メモリが実際に利用可能であるという保証がないことを意味します。

+0

Linux以外のどのOSが楽観的なメモリ割り当てを行い、OOM Killerのアナログを持っていますか? –

+0

@JonathanLeffler - AFAIK、実際の使用がWindowsとiOで完了するまでメモリの割り当てを遅らせる(ただし、間違っている可能性があります...) – MByD

2

最新のオペレーティングシステムは、割り当て時に仮想メモリアドレスを返すだけで、実際にはメモリのチャンクを指していません。それはあなたがそれを使いたいときにのみ '割り当て'されます。

+0

意味があります。だから、どのくらいの量のメモリが事実上割り当てられているのか、 –