💻

1000行OS 勉強メモ 06 C標準ライブラリ

に公開

概要

  • 1000行OSの勉強メモです

https://operating-system-in-1000-lines.vercel.app/ja/06-libc

commonc.h

#define NULL    ((void *)0)
#define align_up(value, align)  __builtin_align_up(value, align)
#define is_aligned(value, align)    __builtin_is_aligned(value, align)
#define offsetof(type, member) __builtin_offsetof(type, member)
#define va_list __builtin_va_list
  • define NULL ((void *)0)
    • NULLの定義
    • C言語では、void *は他のオブジェクトポインタ型へ暗黙に変換なのでキャストせずに使用可能
  • #define align_up(value, align) __builtin_align_up(value, align)
    • valuealignの倍数まで切り上げる
    • align_up(13, 4)なら、13以上で一番近い4の倍数は16
  • #define is_aligned(value, align) __builtin_is_aligned(value, align)
    • valuealignの倍数に揃っているか調べる
    • is_aligned(16, 4)はtrue
    • is_aligned(18, 4)はfalse
  • #define is_aligned(value, align) __builtin_is_aligned(value, align)
    • 構造体の先頭からメンバまでの距離を求める

Discussion