sizeof と kobjsize
上記に関連して.
uClinuxで使う mm/nommu.c 中の重要関数 do_mmap_pgoff() では,
... struct vm_area_struct *vma = NULL; ... vma = kzalloc(sizeof(struct vm_area_struct), GFP_KERNEL); ... realalloc += kobjsize(vma); askedalloc += sizeof(*vma);
としている箇所がある.
ここで,realalloc は実際に確保された値.askedalloc は本来欲しかった値.
sizeof演算子では,struct vm_area_struct のサイズが取得できる.
一方,kobjsize(vma) では,vma が kzalloc()(kmalloc()) によってスラブオブジェクトとして確保されるため,サイズは2の冪乗となり,その値が返る.
よって,realalloc には実際に確保された2の冪乗サイズ.askedalloc には要求された構造体のサイズが入る.
ちなみん,これら二つの変数は,2.6.23-mm1 現在全く使われていない.