Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задание размерности массива 
:(
    Опции темы
yngwie19
Дата 18.3.2009, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Ребят всем привет. Подскажите в чем разница:
Код

int nArray[1000];

Код

int nArray[0x1000];


Размеры массивов будут одинаковы?
PM MAIL   Вверх
Rififi
Дата 18.3.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



yngwie19, 
естесно нет.
вторая размерность записана в 16-ричном виде
PM MAIL   Вверх
mes
Дата 18.3.2009, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250




Цитата(yngwie19 @  18.3.2009,  22:39 Найти цитируемый пост)
Размеры массивов будут одинаковы? 


0х1000 = 0x10*0x10*0x10 = 16*16*16 = 4096

4096 != 1000 smile


--------------------
PM MAIL WWW   Вверх
yngwie19
Дата 19.3.2009, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



спасибо Я так и думал, просто в книге, которую Я читаю описан механизм выделения памяти и там int nArray[0x1000] == int nArray[1000]; ну да ладно наверное опечатка.
Я собственно к чему это спршиваю. Объясните почему при чтении файла без буферизации, необходимо чтобы буфер чтения (структура по определенному адресу) был выровнен на величину кратную размеру сектора диска (т.е 512 байт) ?
PM MAIL   Вверх
Anikmar
Дата 19.3.2009, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(yngwie19 @  19.3.2009,  00:04 Найти цитируемый пост)
Я собственно к чему это спршиваю. Объясните почему при чтении файла без буферизации, необходимо чтобы буфер чтения (структура по определенному адресу) был выровнен на величину кратную размеру сектора диска (т.е 512 байт) ? 

А если ваша программа будет работать на другом компе? Или вы диск поменяете? Оставьте буферизацию ОС - она лучше с этим справится.
PM MAIL ICQ   Вверх
yngwie19
Дата 19.3.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



ну в этих целях можно примнять VirtualAlloc()
PM MAIL   Вверх
Anikmar
Дата 19.3.2009, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(yngwie19 @  19.3.2009,  00:15 Найти цитируемый пост)
ну в этих целях можно примнять VirtualAlloc() 

В каких целях?

PM MAIL ICQ   Вверх
yngwie19
Дата 19.3.2009, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



при динамическом выделении  памяти под массив фунцией VirtualAlloc(),  ею возвращается указатель выровненный по адресу кратный 64Кбайт.
PM MAIL   Вверх
Anikmar
Дата 19.3.2009, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(yngwie19 @  19.3.2009,  00:21 Найти цитируемый пост)
при динамическом выделении  памяти под массив фунцией VirtualAlloc(),  ею возвращается указатель выровненный по адресу кратный 64Кбайт.


И? Я просто не понял, чем выравнивание буфера поможет выравнивание по размеру сектора диска?
PM MAIL ICQ   Вверх
yngwie19
Дата 19.3.2009, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



ну короче, при считывании из файла а-синхронным способом в некий массив, нужно чтобы он распологался в памяти по адресу кратному 512байт, Я и спрашиваю почему именно так?
PM MAIL   Вверх
Anikmar
Дата 19.3.2009, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Что значит асинхронным методом?
Какими функциями чтения из файла вы собираетесь пользоваться?
PM MAIL ICQ   Вверх
yngwie19
Дата 19.3.2009, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Код

HANDLE hFile;
DWORD dwSize;
OVERLAPPED ovlp;
int *nBuf = (int*)VirtualAlloc(NULL,4*1000,MEM_RESERVE | MEM_COMMIT,PAGE_READWRIRE);
..........
ReadFile(hFile,nBuf,sizeof(buf),&dwSize,&ovlp)

VirtualFree(nBuf,0,MEM_RELEASE);

PM MAIL   Вверх
Anikmar
Дата 19.3.2009, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



ReadFile и так будет буферезироваться средствами системы - зачем сверху наворачивать еще что-то? Сектор диска считается достаточно быстро, лучше уделить внимание обрабатывающему алгоритму.
ИМХО, естественно.

PM MAIL ICQ   Вверх
GoldFinch
Дата 19.3.2009, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Цитата(yngwie19 @  19.3.2009,  00:04 Найти цитируемый пост)
необходимо чтобы буфер чтения (структура по определенному адресу) был выровнен на величину кратную размеру сектора диска (т.е 512 байт) ? 

размер буфера должен быть кратен 512байтам (0x200), т.к. с диска информация читается сразу секторами, по 512байт

VirtualAlloc() выделяет куски памяти с размером кратным 4086 байт (0x1000)
PM MAIL ICQ   Вверх
yngwie19
Дата 19.3.2009, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



дак что при а-синхронном считывании из файла не нужно выделять память с помощью VirtualAlloc() ?

Добавлено через 1 минуту и 37 секунд
Цитата

т.к. с диска информация читается сразу секторами, по 512байт


а если массив не бдет кратным 512 байт, то последние элементы не прочитаются?
PM MAIL   Вверх
GoldFinch
Дата 19.3.2009, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



yngwie19, при помощи VirtualAlloc() надо выделять только куски кратные 4Кб, иначе будет выделяться неиспользуемая память
Если массив не будет кратным 512 байт, например 500байт то прочитается как если бы он был кратен 512 байтам, 500 байт массива запишутся, а 12 прочитанных с диска байт пропадут. При следующем чтении 500байт опять считается тот кластер файла, но из него запишутся 12 байт, затем считаются следующий кластер и запишутся 488 байт

Добавлено через 1 минуту и 4 секунды
данные не потерются но быстродействие снизится раза в полтора
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.