私はこのmalloc関数を勉強していると私はいくつかの助けを使用することができます。mallocとボイドポインタ
static void *malloc(int size)
{
void *p;
if (size < 0)
error("Malloc error");
if (!malloc_ptr)
malloc_ptr = free_mem_ptr;
malloc_ptr = (malloc_ptr + 3) & ~3; /* Align */
p = (void *)malloc_ptr;
malloc_ptr += size;
if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)
error("Out of memory");
malloc_count++;
return p;
}
私は十分なメモリがある場合のmalloc funcは、あらゆるタイプのメモリ空間を割り振ることを知っているが、ライン私は理解していない:
p = (void *)malloc_ptr;
malloc_ptr += size;
それはどのようにそのようなデータ型を指すことができますか?私はちょうどそのvoidポインタまたはその位置を理解できません。
注:malloc_ptrは、それはそれはあなたがmalloc
通話中のためのスペースを割り当てているかわかりませんので、あるのvoidポインタを返すunsigned long型
このコードで何が起こるのか、その後マイナスにサイズを入力している場合には、第2のコードで同じ符号なしlong' 'へのポインタが(つまり' malloc_ptr')も指すことができるという仮定が含まれていますアラインメントの観点から、他のどのオブジェクトにも適用できます。この仮定は必ずしも正しいとは限りません(例えば、いくつかのシステムでは 'long double'オブジェクトを指すことができないかもしれません)。 –
コードでは、4バイトアライメントよりも厳密なアラインメント要件を持つタイプはないものとしています。このコードは 'free_mem_ptr'と' free_mem_end_ptr'の初期化方法を示していません。スペースがなくなるとNULLを返しません。関数 'error()'が返ってくると、すべての地獄が緩んでしまいます。 –