#c
노트 20개
Computer Science
C 프로그래밍C 언어의 컴파일 과정과 자료형·연산자·문자열, 포인터와 메모리, 구조체·공용체와 함수 포인터, 스코프와 링키지, 입출력, 빌드 도구(gcc·make)와 디버깅 도구, 호출 규약과 저수준 최적화, 역사와 표준.
Computer Science › C Programming
포인터와 메모리C에서 주소와 포인터로 메모리를 다루는 법과 자주 걸리는 함정. 주소·역참조, 문자열의 실체, 동적 할당과 저장 기간, 스택과 힙, 배열과 포인터가 다른 경우, 읽기 전용 리터럴, const의 위치, 이중 포인터, 댕글링 포인터, memcpy와 memmove, malloc/free와 new/delete의 짝.
Computer Science › C Programming
호출 규약과 스택 프레임함수 호출이 기계어 수준에서 어떻게 이루어지는지 정리한다. 스택 프레임과 프롤로그·에필로그, 스택이 자라는 방향을 확인하는 법, cdecl과 System V AMD64 같은 호출 규약, 가변 인자 함수(va_list)가 동작하는 원리, 꼬리 호출 최적화.
Computer Science › C Programming
C 기초: 컴파일, 자료형, 연산자, 제어문, 함수, 배열과 문자열비트와 바이트로 정보를 표현하는 법, 소스 코드가 실행 파일이 되는 4단계 컴파일 과정, 디버깅, C 자료형의 크기, 연산자와 수식의 함정(정수 나눗셈, 증감의 미정의 동작, 대입식, 단락 평가, 우선순위), 제어문(if·switch·반복문·goto)과 함수(원형, 값에 의한 호출), 배열 초기화 규칙, 널 종단 문자열과 ctype.h·string.h 함수의 함정(strncpy, strtok, gets 대신 fgets, atoi 대신 strtol), 명령행 인자.
Computer Science › C Programming
C 디버깅 도구C 프로그램의 버그를 잡는 도구를 쓰임새별로 정리한다. GDB·LLDB로 멈춰서 들여다보기, AddressSanitizer·UBSan으로 메모리 오류와 미정의 동작 잡기, leaks·Valgrind로 누수 찾기, strace로 시스템 콜 추적하기, 그리고 Segmentation fault와 Bus error의 차이.
Computer Science › C Programming
C 사용자 정의 타입과 함수 포인터: 구조체, 공용체, 열거형, typedefC의 사용자 정의 타입(구조체, 공용체, 열거형, typedef)과 함수 포인터를 정리한다. 구조체의 메모리 배치와 패딩, 멤버가 한 메모리를 공유하는 공용체와 태그 공용체·타입 퍼닝, int 상수일 뿐인 열거형, 새 타입이 아니라 별명인 typedef, 함수 포인터와 콜백, 그리고 이들을 조합해 캡슐화·다형성·제네릭 컨테이너를 흉내 내는 불투명 포인터와 가상 함수 테이블 패턴.
Computer Science › C Programming
C 입력과 파일 입출력scanf로 표준 입력을 받고, fopen·fprintf·fread·fclose로 파일을 읽고 쓰는 C 표준 라이브러리(stdio)의 기본 입출력. 매직 넘버로 JPEG를 판별하는 바이너리 읽기 예제를 담는다.
Computer Science › C Programming
C 저수준 최적화컴파일러가 이미 해 주는 최적화와 프로그래머가 힌트로 도울 수 있는 부분을 구분한다. switch를 룩업 테이블·점프 테이블로 바꾸는 원리, 분기 예측 힌트(__builtin_expect, [[likely]]), 도달 불가 힌트, SIMD 내장 함수, memset 같은 라이브러리 함수를 직접 최적화하지 말아야 하는 이유.
Computer Science › C Programming
C로 하는 2D 그래픽 기초SDL과 MiniLibX 같은 C 그래픽 라이브러리의 공통 구조(창, 이벤트 루프, 이미지 버퍼, 렌더러)와 픽셀을 직접 다루는 기법(ARGB 색 패킹, 브레젠험 직선, 선형 보간 그라데이션, 회전 변환, 등각 투영)을 정리한다. SDL2와 SDL3의 차이도 짚는다.
Computer Science › C Programming
C의 스코프와 링키지C에서 같은 이름이 무엇을 가리키는지는 스코프, 이름 공간, 링키지가 정한다. 블록·파일 스코프와 이름 가림, 태그·멤버·라벨·일반 식별자의 네 가지 이름 공간, 저장 기간, static으로 파일 밖 노출을 막는 내부 링키지, 기호 상수를 #define·enum·const로 정의하는 법을 정리한다.
Computer Science › C Programming
C의 역사와 표준C는 유닉스를 이식하기 위해 태어났고, K&R C에서 C89/C90, C99, C11, C17, C23으로 표준화되었다. 원형 없는 함수 호출과 암묵적 int 같은 옛 규칙이 memset(int c) 같은 흔적으로 남은 이유, 유닉스·BSD·리눅스와 POSIX의 관계를 정리한다.
Computer Science › C Programming
C의 정수 자료형과 형 변환C 표준은 자료형의 최소 크기만 정한다. 고정 폭 정수(stdint.h)와 size_t, 정수 승격과 일반 산술 변환, 부호 확장, 부호 있는 정수 오버플로가 미정의 동작인 이유, 부동소수점 비교와 고정소수점까지 C에서 숫자가 예상과 다르게 계산되는 지점을 정리한다.
Computer Science › C Programming
GCC 컴파일과 링크gcc/clang으로 단계별 결과물(.i .s .o)을 뽑는 옵션, 경고·디버깅·최적화 플래그, 정적 라이브러리(.a)와 공유 라이브러리(.so/.dylib)를 만들고 링크하는 법, 링크 순서와 런타임 라이브러리 탐색, 헤더 중복 포함 방지를 정리한다.
Computer Science › C Programming
Makefile과 makemake는 타깃과 의존 파일의 수정 시각을 비교해 바뀐 부분만 다시 빌드하는 도구다. 규칙·변수·자동 변수·패턴 규칙·내장 규칙, -MMD -MP로 헤더 의존성 자동화, .PHONY, 리링크 방지, 하위 디렉터리 빌드와 병렬 빌드에서 생기는 함정을 정리한다.
Computer Science › Operating System
운영체제의 시간과 타이머운영체제가 다루는 세 가지 시간(벽시계·단조·프로세스 CPU 시간), 이를 재는 하드웨어(RTC·HPET·TSC), POSIX 시계 API, sleep 계열 함수, alarm과 인터벌 타이머를 정리한다. 경과 시간은 단조 시계로 재야 하는 이유가 핵심이다.
Computer Science › Operating System
POSIX 스레드와 동기화 APIC에서 스레드를 다루는 POSIX pthread API와 동기화 도구. 스레드 생성·join·detach, 뮤텍스와 조건 변수, POSIX 세마포어, 원자성을 하드웨어가 보장하는 방법, 커널 내부의 스핀락, Java 모니터와의 대응을 정리한다.
Computer Science › Operating System
UNIX 시그널커널이나 다른 프로세스가 프로세스에 보내는 비동기 알림인 시그널. 주요 시그널과 기본 동작, sigaction과 핸들러 작성 규칙, 보류·병합 특성, SIGCHLD와 좀비 프로세스, 시그널을 통신에 쓸 때의 한계를 정리한다.
Computer Science › Operating System
UNIX 파일 입출력과 파일 디스크립터프로세스가 파일·파이프·소켓을 정수 하나(파일 디스크립터)로 다루는 UNIX 입출력 모델. 커널의 세 테이블, open 플래그와 read 반환값 처리, dup2와 리다이렉션, stdio 버퍼링 모드와 페이지 캐시, I/O 멀티플렉싱, mmap과 그 한계를 정리한다.
Computer Science › Programming Languages
메모리 풀같은 크기의 객체를 자주 할당·해제할 때 큰 블록을 미리 잡아 두고 한 칸씩 나눠 주는 메모리 풀을 정리한다. 고정 크기 풀은 빈 칸 인덱스 스택 하나로 할당과 해제를 O(1)에 끝내고, 가변 풀은 고정 풀을 청크로 이어 붙인다. 클래스의 operator new/delete를 오버로딩하면 호출 코드를 바꾸지 않고 풀을 쓸 수 있다.
Algorithm › Data Structure
기초 자료구조: 배열에서 트라이까지연산의 약속(추상 자료형)과 구현(자료구조)을 나누는 관점, 배열과 realloc 크기 조정 비용, 배열·행렬 문제의 요령(부분 배열과 부분 수열, 인덱스 변환, 전치), 연결 리스트(C 구조체·Kotlin 예제)와 둘 중 고르는 기준, 더미 노드·제자리 뒤집기 같은 연결 리스트 기법, 층을 쌓아 건너뛰는 스킵 리스트, 이진 탐색 트리와 균형, 해시 테이블과 충돌, 트라이, 얕은 복사와 깊은 복사.