C언어 전처리기 매크로 제대로 쓰기 — 괄호, do-while(0), #과 ##, X-macro, _Generic

매크로(macro)는 함수 호출 비용 없이 코드를 재사용하고, 타입에 상관없이 동작하는 코드를 만들 수 있어 C에서 자주 쓰인다. 문제는 전처리기가 문법을 이해하지 않고 토큰을 그대로 치환한다는 점이다. SQUARE(1 + 2)가 5가…

Continue ReadingC언어 전처리기 매크로 제대로 쓰기 — 괄호, do-while(0), #과 ##, X-macro, _Generic

리눅스 커널 GCC 빌드와 Clang 빌드에 따른 Slab 메모리 차이 분석

커널을 Clang으로 빌드하면 GCC 빌드와 메모리 사용량이 달라질까. 컴파일러가 바뀌면 인라이닝과 코드 생성이 달라지니 커널이 잡는 슬랩(slab) 메모리도 따라 달라질 것 같지만, 실제로 재보면 어느 쪽이 얼마나 다른지 숫자로 답한…

Continue Reading리눅스 커널 GCC 빌드와 Clang 빌드에 따른 Slab 메모리 차이 분석

‘atomic_inc’ from incompatible pointer type [-Werror=incompatible-pointer-types]

벤더 커널을 빌드하다가 아래와 같은 에러를 만났다. /home/worker/.../kernel-source/include/linux/cred.h:258:28: error: passing argument 1 of 'atomic_inc' from incompatible pointer type [-Werror=incompatible-pointer-types] 258 | atomic_inc(&new->usage); | ^~~~~~~~~~~ | | | atomic_long_t * {aka…

Continue Reading‘atomic_inc’ from incompatible pointer type [-Werror=incompatible-pointer-types]