4

アプリの起動時に malloc でスペースを割り当てています。この変数にデータを入力しない場合、top はこのアプリで使用されるメモリの 0% を示しますが、この変数にデータを入力し始めると、この配列にデータを入力する方法で RAM の使用量が増加し始めます。

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

私はUbuntu 10.10 64ビットにいます。これを設定するコードは次のとおりです。

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 の母集団のコメントを外すと、RAM の使用量が増えます。コメントのままにしておくと、使用量は 0% になります。

4

2 に答える 2

6

短い答え、いいえ。多くの OS では、malloc を呼び出すと、直接メモリが割り当てられるのではなく、アクセスしたときにのみメモリが割り当てられます。

malloc マンページから:

デフォルトでは、Linux は楽観的なメモリ割り当て戦略に従います。これは、malloc() が非 NULL を返す場合、メモリが実際に使用可能であるという保証がないことを意味します。

于 2012-04-21T20:34:20.830 に答える
2

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

于 2012-04-21T20:34:05.480 に答える