- 締切済み
C言語 mallocによる消費メモリ
char *b = (char *)malloc(sizeof(char) * 6) というC言語のプログラムで、消費されるメモリは何バイトになるのでしょうか?理由も合わせて教えていただきたいです。 32ビットのPCで行うものとしてよろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- chie65536(@chie65535)
- ベストアンサー率44% (8802/19961)
>消費されるメモリは何バイトになるのでしょうか? 32ビット系のシステムなら、最低でも20バイトか24バイト。 >理由も合わせて教えていただきたいです。 ヒープ領域で確保されたメモリブロックは「16バイトの、ブロック管理用のデータ」と「確保したサイズのメモリ」と「4バイト境界に整列させる為の調整領域」で構成されます。 ある処理系では、6バイト分が確保されたメモリのポインタの前後を見ると このブロックの前のブロックのアドレス4バイト このブロックの次のブロックのアドレス4バイト このブロックで確保されたメモリのサイズ4バイト このヒープメモリの先頭ブロックのアドレス4バイト 確保されたメモリ6バイト ←この6バイトの先頭がmallocで返って来るポインタ 次が4バイト境界になるための調整領域2バイト という感じで、24バイト使われます。 上記の場合「4バイトの管理用データが4つある」ので、合計24バイトになりますが「4バイトの管理用データが3つある」と言う処理系や「4バイトの管理用データが5つある」と言う処理系も存在します。 つまり「何バイト使われるかは、処理系に依存するので、判らない」が答え。
- wormhole
- ベストアンサー率28% (1626/5665)
#3です。 とりあえず書いておきますが、sizeof 演算子を使ってmallocが実際に確保しているメモリサイズを取得することはできません。
- wormhole
- ベストアンサー率28% (1626/5665)
malloc系の実装により異なります。
- trapezium
- ベストアンサー率62% (276/442)
消費メモリということなら、malloc() の管理用の領域や切りのいい数値への切り上げ等あるので、最低6バイト以上で実装によって違うんじゃないですかね。フリーな実装なら malloc() 周辺のコードを漁れば大体予想付くでしょうけど、その時々でも変化するので厳密に制御したいなら自作するしか無いでしょう。
- maiko0318
- ベストアンサー率21% (1483/6969)
charは普通1バイトなので6バイトですね。 ただ、処理系(OSやコンパイラ)によっては違うこともありますので、 sizeofを使って表示させてみてください。