2014-03-03 1 views

답변

2

음, 물론 "큰"버퍼를 미리 할당하고 필요에 따라 부분을 사용하면 힙 메모리를 사용하지 않아도됩니다.

정적 인 (사전에 알려진) 제한이 있음을 의미합니다. 그 주위의 유일한 것은 malloc()realloc()을 통해 힙을 사용하는 것입니다.

0

아니요. C에는 세 가지 메모리 할당 장치가 있습니다. malloc, calloc 및 realloc. 다른 두 가지에 비해 realloc은 realloc을 호출 할 때마다 전체 메모리 뱅크를 다시 초기화하기 때문에 매우 비쌉니다 (이 이유 때문에 2 : 1, 2, 4, 8, 16, 32의 제곱으로 초기화하는 것이 낫습니다.) 한 번에 하나의 추가 변수 위치를 초기화 한 경우처럼 복사 프로세스가 오래 걸리지 않습니다.

malloc과 calloc의 주요한 차이점은 malloc이 메모리를 초기화하지 않는다는 것입니다. 따라서 calloc은 메모리를 '0'으로 줄이는 반면에 문자 그대로 쓰레기로 끝날 수 있습니다.

+0

나는 realloc에 ​​대해서는 그렇게 생각하지 않는다. 구현에서 나는 그것이 malloc(), free() 그리고 memcpy()와 같은 무료, 아주 싼, 정확히 같은 비용을 가지고 있음을 안다. –

+0

아니에요. 비용은 엄청납니다. memcpy()는 복사 할 메모리의 길이가 증가함에 따라 지수 곡선에서 증가하는 자체 비용이 큽니다. – ciphermagi

+0

먼저 생각해보십시오. 같거나 작은 크기의 realloc은 대개 무료입니다. 조금 더 큰 realloc은 작은 책 관리 작업을 필요로합니다. memcpy는 O (n)이 아니라 O (n^2)입니다. http://stackoverflow.com/questions/362760/how-do-realloc-and-memcpy-work를 참조하십시오. –

관련 문제