powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сколько с винта быстрей всего прочитать?
13 сообщений из 13, страница 1 из 1
Сколько с винта быстрей всего прочитать?
    #33146171
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть паредположение, что читать с винта по байту - хреново. Ибо в винде есть кластеры, а в Линухе ещё что-то похожее. Да и головка винта за разможет прочесть не один байт. Вопрос: как определить сколько байт за раз прочесть лучше всего?

ЗЫ: кто читал исходники поймёт.
...
Рейтинг: 0 / 0
Сколько с винта быстрей всего прочитать?
    #33146182
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinЕсть паредположение, что читать с винта по байту - хреново. Ибо в винде есть кластеры, а в Линухе ещё что-то похожее. Да и головка винта за разможет прочесть не один байт. Вопрос: как определить сколько байт за раз прочесть лучше всего?

ЗЫ: кто читал исходники поймёт.

Читай man mmap
...
Рейтинг: 0 / 0
Сколько с винта быстрей всего прочитать?
    #33146183
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗемлекопЧитай man mmap
Пасиба.
...
Рейтинг: 0 / 0
Сколько с винта быстрей всего прочитать?
    #33147547
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читать лучше по обьёму, время чтения которого РАВНА времени его обработки !!! (это если хошь закон) Тогда получишь оптимум по времени выполнения данной задачи.
Пример...
Индексные страницы у DBF имеют длину в 1 - 2 килобайта. Хотя с первого взгляду было бы практичней закачивать по 65 кил. или поболее (реал моде берём).

Кто не верит, пусть проверит...
(круглый)
...
Рейтинг: 0 / 0
Сколько с винта быстрей всего прочитать?
    #33148482
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SarinЕсть паредположение, что читать с винта по байту - хреново. Ибо в винде есть кластеры, а в Линухе ещё что-то похожее. Да и головка винта за разможет прочесть не один байт. Вопрос: как определить сколько байт за раз прочесть лучше всего?


Здравая мысль

Хочу тебя успокоить. Прочитать ОДИН байт довольно сложно. Во
первых, железо осуществляет ввод-вывод "посекторно" (обычно 512 байт)
Во вторых, операционка имеет моду читать и писать "покластерно"
на различных ФС. Для СУБД например, тюннинг размера кластера ФС
имеет большое значение т.к. непосредственно влияет на скорость
рассеянных чтений диска.

С точки зрения мультизадачности, лучше иметь большие буферы
чтения-записи т.к. конкуренция за ввод-вывод будет менее заметна.
Однако такой подход делает системы инерционными и крайне
неотзывчивыми к пользователю. Что для логирования неприемлемо.

А для согласованности и непротиворечивости данных (опять-же в СУБД)
рекомендуется наоборот - почаще выполнять flush, чтобы в
случае отключения питания не потерять "кусок транзакции".

Вот так. Выводы делай сам.
...
Рейтинг: 0 / 0
Сколько с винта быстрей всего прочитать?
    #33149061
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно. Я решил не заморачиватся с определением того сколько мне прочесть выгодней. Ясно дело что прчесть за раз даж 2 килобайта лучше, чем 3 байта:)

Но вот трабл. Как сие реализовать? Я думал проблем не будет. Написал просто:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#incluse <stdio.h>

main(){
	FILE *file;
	char *c;

	f = fopen("/home/sarin/2/test/t", "rb");
	fread(c,  1 ,  10 , f);
	c[ 10 ] =  0 ;
	printf("%s", c);
	
}

Но не пахёт.
...
Рейтинг: 0 / 0
Сколько с винта быстрей всего прочитать?
    #33149083
Фотография Землекоп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто будет память аллокировать, на которую char *с должно указывать? Какой-нибудь malloc или new?
...
Рейтинг: 0 / 0
Сколько с винта быстрей всего прочитать?
    #33149123
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sarin wrote:
> char *c;
> f = fopen("/home/sarin/2/test/t", "rb");
> fread(c, *1*, *10*, f);
> c[10] = 0;

ну ты меня поражаешь раз от раза :-)

самый "правильный" способ, написать функцию "чтения" N байт.
а вот эта функция сама заботится о том, чтобы считывать буффер, если он
пуст, и выдавать следующую порцию из N байт.
при этом будет проверять, удалось ли чтение и выдавать соответствующие
сообщения в лог или там прямо на консоль.
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Сколько с винта быстрей всего прочитать?
    #33149144
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
Sarin wrote:
> char *c;
> f = fopen("/home/sarin/2/test/t", "rb");
> fread(c, *1*, *10*, f);
> c[10] = 0;

ну ты меня поражаешь раз от раза :-)

самый "правильный" способ, написать функцию "чтения" N байт.
а вот эта функция сама заботится о том, чтобы считывать буффер, если он
пуст, и выдавать следующую порцию из N байт.
при этом будет проверять, удалось ли чтение и выдавать соответствующие
сообщения в лог или там прямо на консоль.
Posted via ActualForum NNTP Server 1.2


а я уже хотел поругатся что при написании пути нужно ставить два \\
но потом вспомнил что он юзает люникс , и там не "\"
...
Рейтинг: 0 / 0
Сколько с винта быстрей всего прочитать?
    #33151280
Sarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗемлекопА кто будет память аллокировать, на которую char *с должно указывать? Какой-нибудь malloc или new?
А подробней? Юзаю Си просто. Соответственно new вроде как не подходит. А malloc - что-то слышал.
...
Рейтинг: 0 / 0
Сколько с винта быстрей всего прочитать?
    #33151365
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sarin wrote:
> А подробней? Юзаю Си просто. Соответственно new вроде как не подходит. А

А подробней - в книжках.
Понимание работы с памятью - первейшая необходимость при
программировании на Си.

то что ты объявил
char* c;
это просто указатель на "некую" память. И ты должен указать, что это за
память, чтобы была определенность.
Например присвоить этот указатель результату функции malloc.
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Сколько с винта быстрей всего прочитать?
    #33151618
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sarin
А подробней? Юзаю Си просто. Соответственно new вроде как не подходит. А malloc - что-то слышал.

malloc - низкоуровневая функция. Выделяет память по байтам.
Возвращает бестиповой указатель на начало выделенного фрагмента.
Как вариации на тему - можно отметить realloc, который умеет увеличить выделенный кусок памяти.

Удалять такие указатели надо через free.

new - используется для создания обьектов. Неявно вызывает
функцию конструирования экземпляра. Можно использовать для
создания массивов атомарных типов, и при удалении такой ссылки
рекомендуется использовать delete[] ptrName;

В рамках новых "веяний", народ предпочитает использовать
либо new с указателями на обьекты либо шаблоны интеллектуальных
указателей (вроде auto_ptr), которые могут удалять за собой память,
когда на них нет ссылок.
...
Рейтинг: 0 / 0
Сколько с винта быстрей всего прочитать?
    #33153142
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
malloc - низкоуровневая функция.
.....
new - используется для создания обьектов.
.....

Добавлю только, что при работе в C должен использоваться malloc/realloc/free. А в C++ - new/delete. Несмотря на всю похожесть C и C++ у них разные принципы работы с паматью. Смешивать возможно, но очень не желательно и чревато.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сколько с винта быстрей всего прочитать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]