Cのmalloc関数は、割り当てたいメモリの「チャンク」の数をパラメータとして取り、mallocによって返された値をキャストするものに基づいてチャンクのバイト数を決定することを本で読んでいます。たとえば、私のシステムでは、int は 4 バイトです。
int *pointer;
pointer = (int *)malloc(10);
コンパイラは int が 4 バイトであることを認識しているため、40 バイトを割り当てます。
これは2つの理由で私を混乱させます:
私は読んでいましたが、サイズパラメーターは実際には割り当てたいバイト数であり、どのタイプのサイズとも関係ありません。
Malloc は、アドレスを返す関数です。void から別の型に返されたアドレスの外部キャストに基づいて、割り当てられたメモリのサイズをどのように調整しますか? それは私が受け入れるはずのコンパイラの魔法ですか?
本が間違っているような気がします。どんな助けや説明も大歓迎です!
その本には次のように書かれていました。
char *string;
string = (char *)malloc(80);
80 は、80 チャンクのストレージを確保します。チャンク サイズは型キャスト (char *) によって設定されます。これは、malloc() が 80 文字のテキスト用のストレージを見つけることを意味します。