전체 글
-
C언어 memset(), memcpy(), memmove()Visual Studio/C 기초 2013. 9. 13. 18:08
이번에는 메모리 블록을 다루는 방법을 구체적으로 포스팅하겠습니다. 지금까지 메모리의 블록을 할당하고 해제하는 방법을 살펴 보았습니다. 먼저, 메모리의 블록에서 모든 바이트를 특정 값으로 설정하기 위해서 memset() 함수를 사용합니다. void *memset(void *dest, int c, size_t count); 인수 dest는 메모리 블록을 가리킵니다. c는 설정할 값이고 count는 dest에서 시작하는 대상 메모리 블록의 바이트 수입니다. c는 int형이지만 char형으로 취급이 됩니다. 즉, 하위 바이트만이 사용되므로 0부터 255까지의 c값을 지정할 수 있습니다. 다음은 memcpy() 함수인데요, 이 함수는 가끔 버퍼라고 하는 메모리 블록간에 데이터의 바이트를 복사합니다. 이 함수는 복..
-
C언어 free()Visual Studio/C 기초 2013. 9. 13. 16:49
malloc() 함수나 calloc() 함수를 사용하여 메모리를 할당할 때 할당된 메모리는 프로그램에서 사용할 수 있는 전체 메모리의 양을 소모합니다. 이렇게 사용 가능한 전체 메모리 영역을 가끔 힙(heap)이라 하는데 힙의 양은 제한되어 있습니다. 프로그램에서 동적으로 할당된 메모리의 특정 블록을 사용한 후에는 나중에 다른 프로그램이나 함수에서 다시 할당하여 사용할 수 있도록 해제 시켜야 합니다. 이를 위해 free() 함수를 사용하는 것이죠. void free(void *ptr); free() 함수는 ptr이 가리키는 메모리 영역을 해제합니다. malloc(), calloc(), realloc() 함수로 할당된 메모리 영역을 해제합니다. 만약 ptr이 가리키는 값이 NULL값이라면 free()는 아..
-
C언어 realloc()Visual Studio/C 기초 2013. 9. 11. 16:23
realloc() 함수는 malloc()이나 calloc() 함수를 통해서 이전에 할당된 메모리 블록의 크기를 변경하는 함수입니다. void *realloc(void *ptr, size_t size); 인수 ptr은 원래의 메모리 블록을 가리키고, 변경하기 원하는 새로운 메모리 블록의 크기는 바이트 단위로 size에 의해서 지정됩니다. realloc()의 진행 과정입니다. 1. ptr이 가리키는 메모리 블록을 확장하기에 충분한 메모리 영역이 존재한다면 함수는 추가로 메모리를 할당하고 ptr을 돌려줍니다. 2. 현재 위치에서 메모리 블록을 확장하기에 충분한 메모리 영역이 존재하지 않는다면 size만큼의 크기를 가지는 새로운 블록이 할당되고 이전의 메모리 블록에 있던 현재의 데이터는 새로운 블록의 시작 부분..
-
C언어 calloc()Visual Studio/C 기초 2013. 9. 10. 22:49
calloc() 함수도 malloc() 함수 처럼 메모리를 할당하는 함수입니다. 차이점은 malloc() 함수처럼 바이트 단위로 메모리를 할당하지 않고 어떤 데이터형을 단위로 해서 메모리를 할당합니다. void *calloc(size_t num, size_t size); size_t는 대부분의 컴파일러에서 unsigned와 같은 뜻을 가집니다. 인수num은 특정 형태를 가지는 데이터의 개수이고 size는 바이트 단위로 표현되는 데이터의 크기입니다. 메모리 할당이 성공적으로 수행되면 할당된 모든 메모리에는 0이 저장되어 정리되고, 함수는 첫 번째 바이트에 대한 포인터를 돌려줍니다. 만약 메모리 할당에 실패하거나 num 또는 size의 값이 0이라면 함수는 NULL값을 돌려주게 됩니다. 예제를 보겠습니다. ..
-
C언어 malloc()Visual Studio/C 기초 2013. 9. 6. 15:37
메모리 영역을 할당하기 위해 라이브러리 함수 malloc()를 사용합니다. 이 함수의 용도는 문자열을 저장하기 위한 메모리 영역을 할당하는 것으로 제한되지 않습니다. 남아 있는 메모리의 양을 확인하기 위해 malloc()함수를 사용해 보겠습니다. #include #include struct kilo{ struct kilo *next; char dummy[1022]; }; //1024바이트 단위의 구조체를 정의합니다. int freemem(void); main(){ printf("%dKB의 사용가능한 메모리가 남아있습니다.\n",freemem()); } int freemem(void) { int cnt=0; struct kilo *head, *current, *nextone; current=head=(st..
-
C언어 qsort(), bsearch()Visual Studio/C 기초 2013. 9. 1. 23:06
프로그램에서 수행되는 가장 흔한 작업은 데이터 검색과 정렬입니다. 따라서 중요한 내용이죠. 먼저 bsearch()는 데이터의 배열에서 검색 키에 일치하는 배열 요소를 찾기 위해 바이너리 검색을 수행합니다. bsearch()를 사용하기 위해서는 배열을 오름차순으로 정렬해야 합니다. 또한 프로그램에서는 하나의 데이터 항목이 다른 항목보다 큰지, 작은지, 같은지를 결정하기 위해 bsearch() 함수에 의해 사용되는 비교 함수를 제공해야합니다. stdlib()에 정의되어 있습니다. void *bsearch(void *key, void *base, size_t num; size_t width, int (*cmp)(void *element1, void*element2)); ... 굉장히 복잡한 함수라서 주의해서 ..