Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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