728x90
size_t란?
size_t는 부호없는 정수형(unsigned integer type)으로 표준 라이브러리에서 메모리크기나 개수를 나타내기 위해 사용하는 타입니다.
stddef.h, stdio.h, stdlib.h, string.h 등의 다양한 헤더파일에서 사용되며, 그 정의는 다음과 같습니다.
typedef unsigned int size_t; //시스템에 따라 다름
하지만 실제 정의는 컴파일러와 시스템 아키텍처에 따라 달라지며, 32bit 시스템에서는 unsigned int, 64bit 시스템에서는 unsigned long 혹은 unsigned long long 일 수 있습니다.
주요 사용 예시 :
- malloc, calloc, realloc 등의 함수에서 메모리 크기를 인자로 받을 때
- sizeof 연사자의 겨로가 타입
- 문자열 관련 함수(strlen, memcpy, memset)에서 크기나 길이를 나타낼 때
size_t length = strlen("hello");
void* ptr = malloc(sizeof(int) * 10);
size_t를 사용했을 때의 장점
1. 플랫폼 독립성
- 32bit/64bit 환경에 따라ㅏ 자동으로 적절한 크기의 타입이 설정됨
- 크로스 플랫폼 코드를 작성할 때 유리
2. 메모리 크기 표현에 최적화
- 메모리 크기와 관련된 연산에서는 부호가 필요 없기 때문에 unsigned로 정의된 size_t가 적절
- 음수가 될 수 없는 값을 표현할 때 안전
3. 오버플로우 방지에 비교적 유리
- 배열 크기나 인덱스의 최대값까지 안전하게 표현 가능(signed 보다 큰 값 표현 가능)
4. 표준 라이브러리와의 일관성
- malloc, strlen, sizeof 등과의 타입 호환성이 맞지 않아서 경고나 오류없이 사용 가능
size_t의 단점 및 주의점
1. 부호가 없으므로 음수 표현 불가
- int 처럼 -1 같은 음수를 표현할 수 없음
- 예를들어, 오류를 -1로 반환하는 로직에는 사용할 수 없음
size_t result = -1 // 이 경우 result는 매우 큰 수가 됨
2. 부등호 비교시 버그 유발 가능
- int와 혼합된 연산 또는 비교 시 예기치 않은 결과 발생 가능
iont a = -5;
size_t b = 10;
if(a < b) // 경고없이 참이지만, 논리적으로 이상할 수 있음
3. 디버깅 시 혼란
- 출력할 때 %zu를 사용해야 ㅎ마ㅕ, 잘못 출력하면 값이 이상하게 보일 수 있음
printf("%zu\n", size_var); // 올바른 방법
4. 이식성이 있으나, 직관성은 떨어짐
- 초보자 입장에서 unsigned int와 달리 직관적으로 이해하기 어려울 수 있음
728x90
'Programming > C, C++' 카테고리의 다른 글
| OpenSSL Provider에 대한 개념 (0) | 2025.05.03 |
|---|---|
| 블록암호 PKCS#7 패딩 기능 C언어 구현 (0) | 2025.04.20 |
| C언어 공유라이브러리(so, dll) API 심볼 외부노출 방법 (0) | 2025.04.17 |