C언어 54

[C언어] malloc 함수 (heap 메모리 할당)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 동적메모리(Heap Memory) 할당을 받기 위해 사용한다. 헤더 #include ※ 함수 사용 시 stdlib.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 void* malloc(size_t size); 파라미터 size_t size malloc 함수를 통해 할당받을 memory의 크기를 입력한다. 반환값 성공 시 유효한 포인터 주소를 반환한다. 실패 시 NULL을 반환한다. Memory 가 부족한 경우 malloc 함수가 실패할 수 있다. 추가로 Memory가 남아있지만 지속적인 메모리 할당 & 해제를 반복하다 보면 내부적으로 메모리가 파편화되어 용량이 남아있어도 ..

C언어/stdlib.h 2023.03.01
[C언어] abort 함수 (프로그램 중단, 비정상 종료)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 SIGABRT 시그널을 발생시켜 프로그램의 비정상 종료를 의도한다. 헤더 #include ※ 함수 사용시 stdlib.h 파일을 include 하지 않는다면 컴파일시 error 발생 ※ 함수 void abort(); 파라미터 void 반환값 없음 (void) 잡학지식 abort 함수는 프로그램을 강제종료하는 함수라고 생각하면 된다. 따라서 24시간 서비스를 제공해야하는 프로그램이거나 예외처리를 하는 방향에서는 사용하면 안된다. abort 함수는 보통 프로그램을 테스트하는데 자주 사용하며, 유닛테스트(unittest) 에서 활용하는것을 자주 볼 수 있다. SIGABRT 시그널을 발생시켜서 프로그램을 종..

C언어/stdlib.h 2023.03.01
[C언어] strrchr 함수 (문자열의 마지막부터 문자를 검색)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 특정 문자열의 마지막 위치부터 문자를 검색할 때 사용한다. 헤더 #include ※ 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 char *strrchr(const char *str, int val); 파라미터 const char *str 특정 문자를 검색할 문자열 버퍼를 입력한다. int val 문자열 버퍼의 마지막에서부터 검색할 문자를 입력한다. 반환값 문자(val) 을 찾은 경우 문자열에서 val의 마지막 위치의 포인터를 반환 문자(val) 을 찾지 못한 경우 시 NULL 을 반환 잡학지식 strrchr 함수는 검색하는 string 버퍼의 ..

C언어/string.h 2023.02.24
[C언어] memset 함수 (메모리 셋팅 함수)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 메모리를 특정 값으로 setting 시 사용한다. 헤더 #include ※ 함수 사용 시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 void *memset(void *dest, int val, size_t size); 파라미터 void *dest 메모리를 setting 할 버퍼의 주소를 입력한다. int val 메모리에 setting 할 value 를 입력한다. size_t size 버퍼에 value를 setting 할 크기를 byte 단위로 입력한다. 반환 값 (return value) 성공 시 dest 의 주소값을 반환한다. 실패 시 NULL 을 반환한..

C언어/string.h 2023.02.05
[C언어] memchr 함수 (버퍼에서 문자 검색)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 버퍼 범위에서 특정 문자의 첫 번째 위치를 찾을 때 사용한다. 헤더 #include ※ memchr 함수 사용 시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 void *memcpy(const void *buf, int val, size_t count); 파라미터 const void *buf 특정 문자를 검색할 버퍼를 입력한다. int val 버퍼에서 검색할 문자를 입력한다. size_t count 검색할 버퍼의 범위를 byte 단위로 입력한다. 반환값 문자(val) 을 찾은 경우 문자열에서 val 의 첫 번째 위치의 포인터를 반환 문자(val) 을 찾지 못..

C언어/string.h 2022.12.22
[C언어] strchr 함수 (문자열에서 문자 검색)

사용범위 Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수 기능 C언어 표준 함수로 문자열에서 특정 문자의 첫 번째 위치를 찾을 때 사용한다. 헤더 #include ※ strchr 함수 사용 시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 char *strchr(const char *str, int val); 파라미터 const char *str 특정 문자를 검색할 문자열 버퍼를 입력한다. int val 문자열 버퍼에서 검색할 문자를 입력한다. 반환값 (return) 문자(val) 을 찾은 경우 문자열에서 val 의 첫 번째 위치의 포인터를 반환 문자(val) 을 찾지 못한 경우 NULL 을 반환 잡학지식 strchr 함수는 검색하는 str..

C언어/string.h 2022.12.22
[C언어] memcmp 함수 (메모리 비교 함수)

사용범위 Windows, Unix 등 모든 OS에서 사용 가능한 표준 API 함수 기능 C언어 표준 함수로 memory 데이터를 비교할 때 사용한다. 헤더 #include ※ 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 int memcmp(const void* buf1, const void* buf2, size_t size); 파라미터 const void* buf1 비교할 첫번째 포인터(주소)를 입력한다. (반드시 유효한 포인터(주소)를 입력해야 한다.) const void* buf2 비교할 두 번째 포인터(주소)를 입력한다. (반드시 유효한 포인터(주소)를 입력해야 한다.) size_t size buf1 과 buf2 를 비교할 바이트 크기를 입력한..

C언어/string.h 2022.11.11
[C/C++] 구조체 패킹 (struct packing)

패킹을 이해하기 전 패딩의 개념을 알아야 한다. https://hackerpark.tistory.com/entry/CC-%EA%B5%AC%EC%A1%B0%EC%B2%B4%ED%81%B4%EB%9E%98%EC%8A%A4-%ED%8C%A8%EB%94%A9-struct-class-padding [C/C++] 구조체(클래스) 패딩 (struct, class padding) 패딩 (padding) 패딩이란 CPU의 효율을 높이기 위해서 효율적으로 메모리를 사용하는 기법 중에 하나이다. (여기서의 효율이란 저장 공간 효율이 아닌 데이터 처리 속도 효율을 의미한다.) 어떤 식 hackerpark.tistory.com 패킹 패킹 (packing) 이란 패딩 규칙에서 기준이 되는 memory block 크기를 변경해서 ..

[C언어] strncpy 함수 (문자열 복사)

사용범위 Windows, Unix 등 모든 OS에서 사용 가능한 표준 API 함수 기능 C언어 표준 함수로 string 을 복사하는 데 사용한다. 헤더 #include ※ 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※ 함수 char* strncpy(char* dest, const char* source, size_t count); 파라미터 char* dest destination 의 약자로 복사한 문자열을 저장할 대상의 버퍼를 입력한다. 반드시 유효한 주소값을 입력해야 하고 유효하지 않은 주소 입력 시 signal 이 발생한다. const char* source dest 에 복사할 데이터 버퍼를 입력한다. size_t count source 에서 dest ..

C언어/string.h 2022.10.03
[C/C++] 구조체(클래스) 패딩 (struct, class padding)

패딩 (padding) 패딩이란 CPU의 효율을 높이기 위해서 효율적으로 메모리를 사용하는 기법 중에 하나이다. (여기서의 효율이란 저장 공간 효율이 아닌 데이터 처리 속도 효율을 의미한다.) 어떤 식으로 메모리를 사용하길래 효율적이라는 걸까? CPU의 데이터 처리 (매우 간략하게) 패딩을 설명하기 전에 CPU의 동작 방식에 대한 이해가 필요한데 너무 깊이 들어가면 이 글의 주제에서 벗어나기 때문에 간략하게 짚고 넘어가려고 한다. 요즘 대부분의 CPU 는 64bit 를 지원하는 x86_64 아키텍처를 사용하고 있다. 이것은 한 번의 CPU 연산으로 처리하는 최대 데이터의 크기가 64bit 즉, 64bit = 8byte 로 메모리에 적재된 데이터를 한 번에 8byte 까지 처리할 수 있다는 의미이다. CP..

반응형