Re[6]: Не могу понять этот Borland C++ 3.1
От: Egor  
Дата: 03.03.05 07:17
Оценка:
Здравствуйте, ansi, Вы писали:

A>Они будут одинаково работать только в случае, если 1024*64 не вылезает за пределы диапазона unsigned int, а он вылеает (смотри пример выше). Поэтому 1024*64 на самом деле будет равно нулю... Значит надо использовать fread(buf, 1024, 64, f); но тут надо учесть, что читать он будет блоками по 1 килобайту и, если в конце файла будет, скажем 1023 байта, то он их не считает. Необходимо будет в самом конце после цикла сделать вызов fread(buf, 1, 1023, f); и обработать эти байты отдельно.

A>Эта же проблема стоит и при выделении памяти: ты фактически выделяешь 0 байт и твоя программа однажды может громко вывалиться с эксепшеном. Странно, что он вообще выделяет блок памяти размером 0 байтов... Таким способом ты можешь выделить максимум 65535 байт, что на один байт меньше нужных тебе 64Кб. Еще можно попробовать функцию calloc(64, 1024). Если не поможет, то тогда уже farmalloc — эта точно сработает, но с такой памятью необходимо "особенное" обращение

Суть программы в следующем — прочитать один большой файл разными размерами буфера (от 1Кб до 64Кб), вывести на экран символы и посчитать затраченное на все это время. Затем построить график зависимости времени от размера буфера.
Так вот если размер буфера увеличиваем — время уменьшается. Доходим до 64Кб — хлоп , а прочитать то нельзя.
Если последовать вышеуказонному совету fread(buf, 1024, 64, f), то получися, что чтение будет проводится по 1024 байт 64 раза (я прав?), и смысл такого чтения для моего случая пропадает.
Попробовал все функции, которые мне советовали. От calloc, farcalloc, malloc, farmalloc — ничего не получается.

if((buf = (char *) farmalloc(sbuf))==NULL)

buf всегда = NULL;

Уф-ф-ф... запутался я совсем.
Спасибо за помощь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.