![]() |
|
Модераторы: bsa |
![]()
|
|
| yngwie19 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Ребят всем привет. Подскажите в чем разница:
Размеры массивов будут одинаковы? |
||||
|
|||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
yngwie19,
естесно нет. вторая размерность записана в 16-ричном виде |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
0х1000 = 0x10*0x10*0x10 = 16*16*16 = 4096 4096 != 1000 |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
спасибо Я так и думал, просто в книге, которую Я читаю описан механизм выделения памяти и там int nArray[0x1000] == int nArray[1000]; ну да ладно наверное опечатка.
Я собственно к чему это спршиваю. Объясните почему при чтении файла без буферизации, необходимо чтобы буфер чтения (структура по определенному адресу) был выровнен на величину кратную размеру сектора диска (т.е 512 байт) ? |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
А если ваша программа будет работать на другом компе? Или вы диск поменяете? Оставьте буферизацию ОС - она лучше с этим справится. |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
ну в этих целях можно примнять VirtualAlloc()
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
||||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
при динамическом выделении памяти под массив фунцией VirtualAlloc(), ею возвращается указатель выровненный по адресу кратный 64Кбайт.
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
||||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
ну короче, при считывании из файла а-синхронным способом в некий массив, нужно чтобы он распологался в памяти по адресу кратному 512байт, Я и спрашиваю почему именно так?
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Что значит асинхронным методом?
Какими функциями чтения из файла вы собираетесь пользоваться? |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
ReadFile и так будет буферезироваться средствами системы - зачем сверху наворачивать еще что-то? Сектор диска считается достаточно быстро, лучше уделить внимание обрабатывающему алгоритму.
ИМХО, естественно. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
размер буфера должен быть кратен 512байтам (0x200), т.к. с диска информация читается сразу секторами, по 512байт VirtualAlloc() выделяет куски памяти с размером кратным 4086 байт (0x1000) |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
дак что при а-синхронном считывании из файла не нужно выделять память с помощью VirtualAlloc() ?
Добавлено через 1 минуту и 37 секунд
а если массив не бдет кратным 512 байт, то последние элементы не прочитаются? |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
yngwie19, при помощи VirtualAlloc() надо выделять только куски кратные 4Кб, иначе будет выделяться неиспользуемая память
Если массив не будет кратным 512 байт, например 500байт то прочитается как если бы он был кратен 512 байтам, 500 байт массива запишутся, а 12 прочитанных с диска байт пропадут. При следующем чтении 500байт опять считается тот кластер файла, но из него запишутся 12 байт, затем считаются следующий кластер и запишутся 488 байт Добавлено через 1 минуту и 4 секунды данные не потерются но быстродействие снизится раза в полтора |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |