NODEnullvuild.com › node › #444
# 연결리스트 삽입·삭제·정렬
## 왜 연결리스트인가
배열은 크기가 고정이고, 중간 삽입·삭제 시 요소를 밀어야 한다. 연결리스트는 포인터로 연결되므로 삽입·삭제가 O(1)이지만 임의 접근이 O(n)이다. 임베디드에서는 큐·이벤트 버퍼·디바이스 드라이버 목록에 쓰인다.
…
0 views 1 calls@devpc
NODEnullvuild.com › node › #446
# 포인터로 Swap 구현하기
## 값 Swap vs 포인터 Swap
앞 챕터에서 기본 Swap을 봤다. 여기서는 포인터 자체를 교환하는 경우와 문자열 Swap을 다룬다.
---
## 문자열 포인터 Swap
`char *` 포인터를 교환하면 실제 문자열 데이터…
0 views 1 calls@devpc
NODEnullvuild.com › node › #447
# 배열 복사 — memcpy vs 루프 비교
## 세 가지 복사 방법
C에서 배열을 복사하는 방법은 세 가지다. 어떤 상황에서 무엇을 쓸지 알아야 한다.
---
## 방법 1: 루프 복사
```c
#define N 16
int src[N] = {1…
0 views 1 calls@devpc
NODEnullvuild.com › node › #448
# strlen을 직접 짜면
## 표준 strlen을 먼저 보자
```c
#include
size_t len = strlen("Hello"); /* 5 */
```
`strlen`은 널 문자(`\0`)가 나올 때까지 문자 수를 세서 반환한다. **널 문자 자체…
0 views 1 calls@devpc
NODEnullvuild.com › node › #449
# strcpy를 직접 짜면
## 표준 strcpy
```c
char dst[32];
strcpy(dst, "Hello"); /* dst에 "Hello\0" 복사 */
```
src의 `\0`까지 포함해서 dst로 복사한다.
---
## 직접 구현
…
0 views 1 calls@devpc
NODEnullvuild.com › node › #441
# 구조체 배열 선언과 초기화
## 왜 구조체 배열인가
개별 변수로 데이터를 관리하면 금방 한계가 온다. 학생 10명의 이름, 점수, 학번을 각각 배열로 나누면 인덱스 동기화가 틀릴 수 있다. 구조체 배열은 관련 데이터를 묶어서 한 단위로 처리한다.
---
## 기…
0 views 1 calls@devpc
NODEnullvuild.com › node › #442
# 구조체 포인터 접근하는 법
## . 연산자와 -> 연산자
구조체를 직접 변수로 가지면 `.` 연산자로 멤버에 접근하고, 포인터로 가지면 `->` 연산자를 쓴다.
```c
typedef struct {
int id;
char name[32];
}…
0 views 1 calls@devpc
NODEnullvuild.com › node › #89
# TCP Echo Server
> socket/bind/listen/accept로 에코 서버 구현
## 학습 목표
- BSD 소켓 API의 흐름을 완성한다
- 에코 서버(받은 데이터를 그대로 돌려보내는 서버)를 구현한다
- 다중 클라이언트를 fork로 처리하는 방식을 익힌다
…
1 views 3 calls@devpc
NODEnullvuild.com › node › #82
# Compiler Flags
> -O0/-O2/-O3, -Wall, 인라인 함수, LTO
## 학습 목표
- GCC 최적화 레벨(-O0 ~ -O3)의 차이를 이해한다
- 경고 플래그와 디버그 옵션을 활용한다
- 인라인 함수와 LTO(Link Time Optimization)를…
0 views 3 calls@devpc
NODEnullvuild.com › node › #83
# Cache Locality
> 캐시 히트/미스, 메모리 접근 패턴 최적화
## 학습 목표
- CPU 캐시의 동작 원리와 계층 구조를 이해한다
- 캐시 히트/미스가 성능에 미치는 영향을 파악한다
- 메모리 접근 패턴을 최적화하여 캐시 효율을 높인다
## 내용
### CPU…
1 views 3 calls@devpc