동적할당 썸네일형 리스트형 malloc 메모리 할당 및 해제 / 재 할당 출처 : winapi.co.kr void *malloc(size_t size ); void free(void *memblock ); 먼저 malloc(엠얼록이라고 읽는다) 함수부터 알아보자. 인수로 필요한 메모리양을 바이트 단위로 전달하면 요청한만큼 할당한다. size_t는 메모리의 양을 나타내는 단위인데 _t로 끝나는 사용자 정의 타입은 표준에 의해 반드시 정의하도록 되어 있으므로 기본 타입과 거의 대등한 자격을 가진다. 플랫폼에 따라 다르게 정의되어 있는데 대부분의 32비트 컴파일러들은 size_t를 unsigned의 부호없는 정수형으로 정의한다. 따라서 이 함수로 할당할 수 있는 이론적 최대 용량은 4G 바이트라고 할 수 있다. 10바이트가 필요하면 malloc(10)이라고 호출하고 1000바이트가.. 더보기 C언어 :: 동적할당 : malloc calloc realloc free 1. malloc - malloc함수의 리턴값은 요구한 메모리를 얻으면 메모리의 시작주소를 리턴해주고 얻지 못하는 경우에는 NULL을 리턴해 준다. NULL은 주소값이 없다는 것을 뜻한다. char *p; p=(char *)malloc(10 * sizeof(char)); 2. malloc과 calloc의 차이 - malloc함수는 요구한 메모리를 초기화 하지 않는 반면에 calloc함수는 요구한 메모리의 값을 0으로 초기화 해준다 char *pmem; pmem = (char *)calloc(10,sizeof(int)); 3. realloc realloc함수는 할당 받은 메모리의 크기를 변경하기 위한 함수이다. 재할당 받는 함수이다. 메모리의 크기를 크게하던 작게하던 상관은 없다. 다만 재 할당을 받아도 .. 더보기 malloc() 작동 원리 http://blackrain.egloos.com/1224982 글 본문에 대한 내 생각을 밝히는 것이 아니기 때문에 트랙백은 남기지 않았다. 다만 글 쓰신 Gony님이 인용하신 '조엘 온 소프트웨어'의 대목에 많은 오류가 있어서 이렇게 글을 적어본다. 물론 좁은 지면과 독자의 배경 지식을 감안해서 쉽고 간단하게 malloc() 동작 원리를 썼으리라 생각한다. 그러나 실제 방식은 이와 많이 다르다. 혹시나 오해를 가질까 해서 이 글을 쓴다. malloc이 어떻게 동작하는지 아십니까? malloc의 본질은 사용 가능한 메모리 블록을 연결 리스트linked list로 길게 연결한 자유 체인(free chain)입니다. malloc은 연결리스트를 따라가며, 요청 받은 메모리 양보다 큰 블록을 찾습니다. 이렇게.. 더보기 [C/C++] malloc, calloc, realloc를 이용한 메모리 할당 malloc와 calloc의 함수 원형은 다음과 같다. void *malloc(size_t size); void *calloc(size_t num, size_t size); malloc는 할당할 메모리 크기를 바이트 단위로 전달받고, 할당된 공간의 값들은 바꾸지 않는다. calloc는 메모리 크기를 두 값으로 나누어 전달받으며, 할당된 공간의 값을 모두 0으로 바꾼다. 그래서 배열을 할당하고 모두 0으로 초기화해야 할 때는 calloc를 쓰면 편하다. 아래 세 문장은 int형 변수를 배열처럼 5개씩 할당하는 예이다. n = (int *)malloc( 5 * sizeof(int) ); n = (int *)calloc( 5, sizeof(int) ); n = (int *)calloc( 1, 5*sizeof(.. 더보기 C언어 :: 동적 메모리 할당 - 사용 1.2 포인터와 동적 메모리 할당 동적으로 할당받은 메모리도 무언가를 통해 접근할 수가 있어야 할 것입니다. 위에서 보듯이 동적 메모리 할당에 관련된 함수들의 반환형들은 모두 void *로써 포인터형 타입이었다. 해당 함수에서는 무슨 목적으로 메모리를 할당하는 것인지를 알 수 없기 때문에 void *이지만 사용하는 개발자는 자신의 목적에 맞게 강제 형변환을 하여야 할 것입니다. 여기에서는 동적으로 할당받은 메모리를 어떻게 포인터 변수로 유용하게 관리하는 지에 대해서 살펴보기로 합시다. 0.1.1 동적 순수 배열 이 책에서 배열은 크게 정적 순수 배열, 정적 인덱스 배열, 동적 순수 배열, 동적 인덱스 배열로 구분하여 설명하고 있습니다.(통용되는 용어는 아닙니다.) 정적이라는 의미는 배열의 크기가 정적이라.. 더보기 C언어 :: 동적 메모리 할당 - 관련 함수 1 동적 메모리 할당 이번 장에서는 프로그래밍에 자주 사용되는 라이브러리 중에 동적 메모리 할당에 관련된 부분에 대한 설명을 하고자 합니다. 프로그래밍에서 데이터를 위해 메모리를 할당하는 방법은 변수 선언에 의한 방법 외에도 필요시에 원하는 사이즈 만큼 동적으로 할당받는 방법이 있습니다. 이는 관리할 데이터의 성향과 관리 기법에 따라 선택을 하게 되는 사항인데 이들에 대해 자세히 알아보기로 합시다. 1.1 동적 메모리 할당 함수들 먼저 여기서는 동적 메모리 할당 함수들에 대해 먼저 살펴보기로 합시다. 1.1.1 malloc() 포맷: void *malloc(size_t size); 사용자가 원하는 메모리 사이즈를 입력매개변수로 전달하면 해당 함수에서 메모리를 할당하여 해당 메모리주소를 반환하는 함수입니다.. 더보기 C언어 :: 이중포인터 동적할당 해제에 관해서.. #include #include /*malloc 과 calloc ,free가 있는 함수*/ void main(void){ int x,y,i,j; int **b; /* b[][]과 *b[] 로 하면 왜 안될까 */ printf("몇행 몇열까지 넣을꺼삼?"); scanf("%d%d",&x,&y); b = (int**)malloc(sizeof(int*)*x); /* (int**)에서 int 옆에 *이 왜 두개있을까? 하나면 워닝뜸.. */ /* sizeof(int*)에서 *은 잇어도 되고 없어도 됨..왜? */ /* int*의 뜻은 몰까? */ for( i = 0; i < x; ++i ) b[i] = (int*)malloc(sizeof(int)*y); /* b= (int*)malloc(sizeof(int)*x.. 더보기 이전 1 다음