위치: 학습 › 개발 (CS) › 언어 › C언어 › 메모리·구조체
규모: 포스팅 9개
포스팅
| 포스팅 | 설명 |
|---|---|
| 가변 길이 구조체(Struct Hack)와 필러 필드 — 헤더 뒤에 매달리는 가변 payload | 헤더 뒤 char data[1]로 가변 페이로드 표현하기, C99 유연 배열 멤버, IPC 호환용 필러 필드 |
| 개수 필드 + 포인터의 포인터 — 동적 문자열 배열 만들고 해제하기 | char** 동적 문자열 배열의 2단계 할당과 역순 해제, 이중 포인터는 for문 하나·3중 포인터를 피하는 이유와 대안 |
| 구조체 패딩과 멤버 정렬 — 정렬 기준은 버스 폭이 아니라 멤버 타입 크기 | 구조체 패딩이 생기는 이유, 멤버 순서에 따른 sizeof 차이(실측 12B vs 8B, 32B vs 16B), 정렬 기준은 버스 폭이 아니라 멤버 타입 크기, packed·패딩 쓰레기값(memcmp·해시)·_Static_assert 실무 함정 |
| 동적 할당 소유권 — caller free vs callee create·destroy 쌍 | caller 할당/해제, callee create·destroy 쌍, callee malloc+caller free(strdup) 세 패턴 비교, deep free vs shallow free·캡슐화·DLL 힙 경계 크래시 이유, 할당 크기 규칙(sizeof(*p)), 전역·s… |
| 메모리 정렬(Memory Alignment)과 aligned_alloc — CPU 워드 경계와 안전한 할당 래퍼 | 64비트 CPU의 워드 단위 메모리 접근과 Unaligned 페널티, C11 aligned_alloc 함수 속성(__wur, attribute) 해독 및 3대 안전장치 래퍼 패턴 |
| 버퍼를 구조체로 캐스팅해 읽기 — 구조체 안의 구조체 배열과 인덱스 접근 | 바이트 버퍼를 구조체로 캐스팅 후 p->member[i].field로 접근, 배열 멤버·개수·패딩·%.Ns 주의 |
| 불투명 포인터(Opaque Pointer) — 헤더는 선언만, 구현은 숨기기 | 불완전 타입으로 구조체 필드를 .c 파일에 숨겨 캡슐화하는 패턴 |
| 정수를 void 포인터 인자에 실어 보내기 — intptr_t 캐스팅 관용구 | pthread_create류 콜백에 정수 하나만 넘길 때의 캐스팅 관용구, 스레드 생성 루프 Race Condition 방지, 주소 0x3 비접근 원리(역참조 배제) 및 32/64비트 이식성 |
| API·규격 데이터 모델을 C 구조체로 설계하는 공식 — JSON·YAML을 정적 메모리로 매핑하기 | REST/OpenAPI 규격의 동적 데이터 모델을 C 언어 정적 구조체로 변환하는 5대 공식(고정 버퍼, 공통 문자열 리스트, 값 내장+비트플래그, Item-List 쌍 컨테이너, Tagged Union) 및 런타임 메모리 라이프사이클 |