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

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

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

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

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


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

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

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

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

Вот так. Выводы делай сам.
...
Рейтинг: 0 / 0
05.07.2005, 01:07
    #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
05.07.2005, 01:49
    #33149083
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько с винта быстрей всего прочитать?
А кто будет память аллокировать, на которую char *с должно указывать? Какой-нибудь malloc или new?
...
Рейтинг: 0 / 0
05.07.2005, 07:27
    #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
05.07.2005, 08:14
    #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
06.07.2005, 00:11
    #33151280
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько с винта быстрей всего прочитать?
ЗемлекопА кто будет память аллокировать, на которую char *с должно указывать? Какой-нибудь malloc или new?
А подробней? Юзаю Си просто. Соответственно new вроде как не подходит. А malloc - что-то слышал.
...
Рейтинг: 0 / 0
06.07.2005, 06:49
    #33151365
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько с винта быстрей всего прочитать?
Sarin wrote:
> А подробней? Юзаю Си просто. Соответственно new вроде как не подходит. А

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

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

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

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

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

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

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


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