저는 RAM의 데이터 바이트를 읽고, qsort를 사용하여 데이터를 정렬하고, 데이터를 파일에 다시 써야하는 프로그램을 가지고 있습니다. 특정 양의 메모리 만 사용하면됩니다. 내가 /usr/bin/time -v
에 대해 내 프로그램을 실행하고 최대 상주 집합 크기를 확인할 때qsort는 C의 두 배 메모리를 사용합니다.
FILE *fp;
/* open file for reading up here , blah blah blah*/
...
int mb = 1024*1024;
int mem_size = 20*mb;
int total_cookies = mem_size/sizeof(Cookie);
Cookie *buffer = (Cookie *) calloc(total_cookies, sizeof(Cookie));
/* read bytes into buffer*/
while ((result = fread(buffer, total_cookies , sizeof(Cookie), fp)) > 0) {
qsort(buffer, total_cookies, sizeof(Cookie), compare);
fwrite(....)
}
free(buffer);
내 문제는, 내가 의도하고있어 메모리의 두 배를 사용한다 : 는 여기에 내가 무슨 짓을했는지의 JIST입니다 문제는 qsort 함수를 다시 가리 킵니다.
qsort를 제 위치에서 정렬하고 여분의 메모리를 사용하지 않으려면 어떻게합니까?
슬프게도, C 표준은 qsort의 구현에 대한 복잡성을 요구하지 않으며, 모든 표준 라이브러리 구현자는 결과가 올바른 한 원하는대로 할 수 있습니다. 유일한 옵션은 제어 할 수있는 자체 정렬 알고리즘을 작성하는 것입니다. – StoryTeller
내 과제에서 우리는 일정량의 메모리를 초과 할 수 없기 때문에 견과입니다. 조교 중 한 조가 qsort라고 말했기 때문에 qsort를 사용하라는 말을 들었습니다. 그러나 결과를 설명하려고했을 때, 나는 "그럴만 한 대답이되어서는 안된다"고 생각했습니다. 그러나 내가 구현 된 곳에서 어디가 잘못되었는지는 알지 못한다. & 메모리 누수가 없거나 전혀 없다. 나는 절대적으로 곤란하다. – koikoi
TA가 귀하의 TA에 속았습니다. [This] (http://port70.net/~nsz/c/c11/n1570.html#7.22.5.2)는'qsort'에 대해 표준에서 말하는 것입니다. 정확성 이외의 요구 사항은 없습니다. 전 세계 개발자들이 공개적으로 관리하고있는 [이 소스] (http://en.cppreference.com/w/c/algorithm/qsort)도 있습니다. TA를 설득하여 자신의 기대치를 조정해야한다고 생각하십시오. TA가 납득되지 않으면 요청대로 과제를하십시오. TA의 라이브러리 구현을 전달하거나 클래스 전체가 실패하게되어 무시할 수 없게됩니다. – StoryTeller