#include #include #include #include #define MAX_BUFFER 1024 #define SORT_FILE_1 "bin1" #define SORT_FILE_2 "bin2" #define SORT_FILE_3 "bin3" int cmp(const void * a, const void * b) { return (*(int*)a - *(int*)b); } void sort_heaps(char* filename) { FILE* file; long int size; int count; //int* it, end; char* buffer; HANDLE heap; int a; file = fopen(filename, "rb"); fseek(file, 0L, SEEK_END); size = ftell(file); fseek(file, 0L, SEEK_SET); count = size / sizeof(int); heap = HeapCreate(0, 0x01000, 0); buffer = (char*)HeapAlloc(heap, 0, size); fread(buffer, sizeof(int), count, file); fclose(file); qsort(buffer, count, sizeof(int), cmp); //end = ((int*) buffer) + count; //for(it = (int*) buffer; it < end; it++) // printf("%d\n", *it); } void sort_mapping(char* filename) { //int* it, end; HANDLE hFile, hMap; DWORD dwFileSize; char* memory; hFile = CreateFile(filename, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL); dwFileSize = GetFileSize(hFile, NULL); memory = (char*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, dwFileSize); qsort(memory, dwFileSize/sizeof(int), sizeof(int), cmp); /*it = (int*) memory; end = it + dwFileSize/sizeof(int); for(it; it < end; it++) printf("%d\n", *it); */ UnmapViewOfFile(memory); CloseHandle(hMap); CloseHandle(hFile); } void sort_basepoints(char* filename) { int* it, end; HANDLE hFile, hMap; DWORD dwFileSize; char* memory; int* data; int i, count; hFile = CreateFile(filename, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL); dwFileSize = GetFileSize(hFile, NULL); count = dwFileSize / sizeof(int); memory = (char*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, dwFileSize); data = (int*)malloc(dwFileSize); i = 0; it = (int*) memory; end = it + dwFileSize/sizeof(int); for(it; it < end; it++) data[i++] = *it; qsort(data, count, sizeof(int), cmp); i = 0; it = (int*)memory; end = it + count; for(it; it < end; it++) (*it) = data[i++]; it = (int*)memory; end = it + count; for(it; it < end; it++) printf("%d\n", *it); UnmapViewOfFile(memory); CloseHandle(hMap); CloseHandle(hFile); } int main() { SYSTEMTIME st, ft; GetSystemTime(&st); sort_heaps(SORT_FILE_1); GetSystemTime(&ft); printf("Heaps: %d ms\n", (ft.wMilliseconds - st.wMilliseconds)); GetSystemTime(&st); sort_mapping(SORT_FILE_2); GetSystemTime(&ft); printf("Mapping: %d ms\n", (ft.wMilliseconds - st.wMilliseconds)); GetSystemTime(&st); sort_basepoints(SORT_FILE_3); GetSystemTime(&ft); printf("Basepoints: %d ms\n", (ft.wMilliseconds - st.wMilliseconds)); return 0; }