밑에 문자열에서 숫자만 추출하는 소스에서
우리는 realloc를 사용하여 동적메모리 할당을 하였습니다.
여기서 동적메모리 할당에 대해서 알아봅시다.
동적메모리는 Heap 영역에 위치하는 녀석으로 malloc , calloc,realloc 이 있습니다.
malloc함수는 리턴값이 void*로서 인자값으로는 데이터형과 메모리의 개수를 입력 받습니다.
메모리를 할당 받을시에는 메모리 영역이 초기화 되지 않는 상태 이구요. 리턴받을시에는
리턴받을 포인터 형에 맞춰 줘야 합니다.
calloc 함수는 malloc과 비슷하지만 다른점이 있습니다. malloc은 동적메모리를 한줄로 할당했다면
이 녀석을 같은 크기에 있는 녀석을 몇개 만듭니다. 결과적으로는 malloc과 메모리 크기는 같습니다.
그리고 또 한가지 다른점은 이녀석은 할당과 동시에 초기화를 해줍니다 +.+
자 그럼 우리가 사용했던 마지막 녀석인 realloc에 대해서 알아봅시다...
이녀석은 동적메모리를 재 할당이라는 개념을 가지고 접근하면 될거 같은데요.
리턴값은 void* 이구요 인자값으로는 동적 할당 받았던 메모리의 처음 주소와 개수를 입력 받는데요.
여기서 그럼 그전에 메모리를 할당받고 그 공간에 저장했던 값들은 사라질까요?
아닙니다. 그래도 보전 됩니다. 즉 할당하기 전에 그 안에 저장된 메모리를 어느곳에 저장했다가
메모리를 재할당 받으면 그공간에 다시 저장합니다. 그럼으로 데이터값들은 저장 되어 있겠죠? ㅎㅎㅎ
그리고 이녀석에 또 다른 특징은 메모리를 재할당시 할당 하는도중 메모리 공간에 현재 사용하는
메모리 영역이 있다면 어떻게 할까요? 그냥 무시할까요? 아니면 점프할까요? ㅎㅎ
다 아닙니다. 다른 메모리공간을 사용하고 있다면 그 뒤 공간에 저장합니다.
여기서 저도 궁금한게 있는데요 그리고 나서 다른 변수에 새로운 Heap영역을 할당한다면
컴파일러는 앞에서 부터 채울까요? 아니면 뒤에서 부터 채울까요?
음 저도 궁금하네요 혹시 이글을 보시는 분중 아시는분은 댓글 달아주세요 ㅠㅠ
우리는 realloc를 사용하여 동적메모리 할당을 하였습니다.
여기서 동적메모리 할당에 대해서 알아봅시다.
동적메모리는 Heap 영역에 위치하는 녀석으로 malloc , calloc,realloc 이 있습니다.
malloc함수는 리턴값이 void*로서 인자값으로는 데이터형과 메모리의 개수를 입력 받습니다.
메모리를 할당 받을시에는 메모리 영역이 초기화 되지 않는 상태 이구요. 리턴받을시에는
리턴받을 포인터 형에 맞춰 줘야 합니다.
calloc 함수는 malloc과 비슷하지만 다른점이 있습니다. malloc은 동적메모리를 한줄로 할당했다면
이 녀석을 같은 크기에 있는 녀석을 몇개 만듭니다. 결과적으로는 malloc과 메모리 크기는 같습니다.
그리고 또 한가지 다른점은 이녀석은 할당과 동시에 초기화를 해줍니다 +.+
자 그럼 우리가 사용했던 마지막 녀석인 realloc에 대해서 알아봅시다...
이녀석은 동적메모리를 재 할당이라는 개념을 가지고 접근하면 될거 같은데요.
리턴값은 void* 이구요 인자값으로는 동적 할당 받았던 메모리의 처음 주소와 개수를 입력 받는데요.
여기서 그럼 그전에 메모리를 할당받고 그 공간에 저장했던 값들은 사라질까요?
아닙니다. 그래도 보전 됩니다. 즉 할당하기 전에 그 안에 저장된 메모리를 어느곳에 저장했다가
메모리를 재할당 받으면 그공간에 다시 저장합니다. 그럼으로 데이터값들은 저장 되어 있겠죠? ㅎㅎㅎ
그리고 이녀석에 또 다른 특징은 메모리를 재할당시 할당 하는도중 메모리 공간에 현재 사용하는
메모리 영역이 있다면 어떻게 할까요? 그냥 무시할까요? 아니면 점프할까요? ㅎㅎ
다 아닙니다. 다른 메모리공간을 사용하고 있다면 그 뒤 공간에 저장합니다.
여기서 저도 궁금한게 있는데요 그리고 나서 다른 변수에 새로운 Heap영역을 할당한다면
컴파일러는 앞에서 부터 채울까요? 아니면 뒤에서 부터 채울까요?
음 저도 궁금하네요 혹시 이글을 보시는 분중 아시는분은 댓글 달아주세요 ㅠㅠ
'Soft Ware > C 언어!!' 카테고리의 다른 글
동적할당 과 랜덤함수를 이용하여 데이터값 넣기 (0) | 2011.12.12 |
---|---|
int main(int argc, char *argv[]) 에 대해서 (0) | 2011.12.12 |
입력받는 문자열에서 숫자만 추출하기 (0) | 2011.12.01 |
ctime 함수 (0) | 2011.11.14 |
Time 함수와 time_t라는 변수에 대해서 (0) | 2011.11.14 |