0

私はメモリを割り当てました:

int *p = (int *) malloc(sizeof(int));

それから私はそれをタイプケースします:

char *new = (char *)p;

私はそれを割り当て解除します:

free(new);

1)文字に1バイトのスペースがあるため、どのくらいのメモリが割り当て解除されますか?2)割り当てられたメモリと割り当て解除されたメモリを追跡するために、メモリマネージャは(組み込みシステムで)どのような内部メカニズムを作成する必要がありますか?(ブール値は許可されていません)

4

2 に答える 2

1

(またはその兄弟の1つを)呼び出すmallocと、メモリのサイズによって、「この割り当てに関する情報」(info_block)の一部として格納されたメモリが割り当てられます。、定数、またはその他に指定したものmallocが渡されたかどうかはわかりません[実際には、割り当てがたとえば16バイトに拡張される可能性があります。このサイズは、割り当ての一部として格納されます。sizeof(int)4sizeof(short)*2

後で呼び出すとfree、が「検索」info_blockされ、解放するサイズがわかります。したがって、内部のポインタが同じ値である限り、ポインタに対してどのようなキャストやその他の操作を行うかは問題ではありません。

于 2013-02-20T11:11:07.710 に答える
0

私はあなたの特定のケースでは、答えは基礎となるアーキテクチャに依存します。32ビットマシンを想定すると、ポインタのサイズは常に4バイトです。使用すると面倒になる可能性があります。

int *p = (int *) malloc(sizeof(char));

しかし、あなたは警告を受けるでしょう、と私は信じています。

したがって、あなたの場合、割り当てられるのは4バイトです。

さらに、mallocからvoid*をキャストしないでください。

int *p = malloc(sizeof(int));

完全に大丈夫です。

于 2013-02-20T10:45:53.993 に答える