Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/35: Рейтинг темы: голосов - 35, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 4

Работа с оперативной памятью

30.07.2012, 04:47. Показов 6966. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
доброго времени суток
пытаюсь написать программу. упёрся в работу с оперативкой.
есть файл произвольного размера(от 1ГБ), в нем хранятся цифры, которые нужны в дальнейшей работе. нужно вычитывать их из файла побайтно.
используя библиотеку stdio.h. насколько я понимаю, функции вроде fopen() пытаются "вычитать" весь файл в оперативку.
не могу найти функции, которые бы позволили вычитывать только часть файла. поскольку со всеми производимыми операциями мне нужно уложиться в 64Мб
до этого приходилось сталкиваться только с микроконтроллерной техникой, а там подобное решалось асемблерной вставкой и прямой адресацией к памяти. насколько я понимаю, виндовс этого сделать не даст, поскольку оперативная память распределяется динамически между всеми запущенными приложениями, а файл на винте может быть фрагментирован, и данные будет проблематично вычитать в нужном порядке. хотя возможно мне просто не хватает знаний
подскажите в какую сторону копать в поисках ответов
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.07.2012, 04:47
Ответы с готовыми решениями:

Работа с оперативной памятью
Доброго дня. Есть интересная задача. Планируется создание чего-то типа сканера оперативной памяти. Необходимо сделать его работающим из под...

Работа с оперативной памятью. Отследить куда считываются значения
Здравствуйте. Занимаюсь разработкой дополнения для своей любимой видеоигры. В папке с игрой есть текстовый файл файл там хранятся параметры...

Создание второго процесса с общей оперативной памятью первого
Может кто-нибудь простой пример написать, чтоб можно было разобраться? (под виндоус) Например: запускается процесс, создается символьная...

10
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
30.07.2012, 10:31
Цитата Сообщение от Грёблин Посмотреть сообщение
функции вроде fopen() пытаются "вычитать" весь файл в оперативку.
сколько надо столько прочитает
Цитата Сообщение от Грёблин Посмотреть сообщение
с микроконтроллерной техникой, а там подобное решалось асемблерной вставкой и прямой адресацией к памяти.
Чего??? пример плиз
Цитата Сообщение от Грёблин Посмотреть сообщение
поскольку оперативная память распределяется динамически между всеми запущенными приложениями, а файл на винте может быть фрагментирован, и данные будет проблематично вычитать в нужном порядке.
хоть немного прочитать про файловые системы, устройство виндос
0
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 4
30.07.2012, 16:00  [ТС]
ValeryS, хм, выходит я не верно использую эту функцию. ну что, ж главное я выяснил. осталось понять как, но это уже детали. главное есть отправная точка

про микроконтрллерную технику. конкретно под MK AVR ATmega16. универсальная программируемая микросхема. отличная вещь, если нужно собрать что-то не большое. и если что-то необходимо обрабатывать в реальном времени, то проще всего сделать асемблерную вставку, поскольку на обработку сишных команд уходят лишние такты.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
30.07.2012, 16:13

Не по теме:

Цитата Сообщение от Грёблин Посмотреть сообщение
MK AVR ATmega16.
и она работает с файловой системой???

Цитата Сообщение от Грёблин Посмотреть сообщение
обрабатывать в реальном времени, то проще всего сделать асемблерную вставку,
кусок из реальной программы at89c5131

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
byte * usb_send_ep0_packet(byte* tbuf, byte data_length)
{
  data int  i;
  data byte b;
 
  Usb_select_ep(0);
 
  for (i=0; i<data_length; i++)
  { 
   b = *tbuf;
   Usb_write_byte(b); //#define Usb_write_byte(x)             (UEPDATX = x)
   tbuf++;
  }
  return tbuf;
}
работает напрямую с регистрами

Ты всерьез считаешь что ассемблерная вставка будет быстрее???
мне всего пару раз приходилось писать вставки
а для AtMega вообще ни разу
знай свой компилятор, поменьше используй библиотек и не будешь проигрывать в скорости
а скорость разработки в разы больше


по теме
fopen() открывает файл
а читает fread
size_t fread(void *buf, size_t size, size_t count, FILE *stream);

Функция fread() читает из потока, адресуемого указателем stream, count объектов длиной size байт и размещает их в массиве buf. Затем указатель текущей позиции файла увеличивается на число, равное прочитанному количеству символов.
http://cpp.com.ru/shildt_spr_po_c/13/fread.html
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
30.07.2012, 16:17
воспользуйся примерчиком из первоисточника
http://msdn.microsoft.com/en-u... 85%29.aspx
читай хоть по байту.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
30.07.2012, 16:26
Открыли файл с помощью fopen а затем читаем его с помощью fscanf или fread в чём проблемма то?
0
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 4
30.07.2012, 16:31  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
и она работает с файловой системой???
нет, есть встроенная флеш-память, которую можно читать/писать по битно, пользуясь адресом
и да, я всерьёз считаю что асм бывает быстрее ) во всяком случае по скорости обработки команд точно выигрывает)

я не программист ) мне просто это любопытно, поэтому пытаюсь понять что и как.

Цитата Сообщение от ValeryS Посмотреть сообщение
по теме
fopen() открывает файл
вот это я и не понял. куда оно его открывает? файл выгружается в оперативку? или просто создаётся ссылка(указатель?) на начало файла хранящегося на винте, для последующего обращения к нему...

спасибо за источники, попробую разобраться )))
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
30.07.2012, 16:47
или просто создаётся ссылка(указатель?) на начало файла хранящегося на винте, для последующего обращения к нему...
C
1
FILE *file = fopen("Путь к файлу","r");//Инициализируем поток чтения
Грёблин, объясни , тебе надо файловую таблицу читать флеши или надо файл с наперёд известным именем(путём)?
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
30.07.2012, 16:54
Цитата Сообщение от Грёблин Посмотреть сообщение
вот это я и не понял. куда оно его открывает? файл выгружается в оперативку?
нет
Цитата Сообщение от Грёблин Посмотреть сообщение
ли просто создаётся ссылка(указатель?) на начало файла хранящегося на винте, для последующего обращения к нему...
ну примерно так
на самом деле создается хандлер(указатель) на файл
и потом при помощи этого хандлера ты можешь писать в файл читать и никто в это время ни сможет пользоваться этим файлом (читал наверное "файл используется ....")
в конце файл надо закрыть

Цитата Сообщение от Грёблин Посмотреть сообщение
и да, я всерьёз считаю что асм бывает быстрее )
компильни С прогу и посмотри дизасемблером и увидишь что никаких тормозов нет
а иногда компилятор оптимизирует и получится быстрее чем на асме
а скорость чаще всего зависит не от языка а от кривых алгоритмов
1
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 4
30.07.2012, 16:58  [ТС]
мне нужно из файла вычитывать данный, побайтно. путь к файлу задаётся после запуска программы(фактически путь указывает пользователь). при этом нужно его прочитать так, что бы он не попал в оперативку, только вычитываемые из него данные, для дальнейшей обработки =)

но кажется я уже понял =))
создаём поток, а в поток читаем нужную часть данных. потом вычищаем оперативную память и читаем следующий кусок.. как-то так
спасибо =)
0
6 / 3 / 0
Регистрация: 19.03.2019
Сообщений: 157
19.09.2020, 11:49
Цитата Сообщение от Грёблин Посмотреть сообщение
файл выгружается в оперативку? или просто создаётся ссылка(указатель?) на начало файла хранящегося на винте, для последующего обращения к нему...
Про mapping ничего не слышали?

File Mapping - Win32 apps | Microsoft Docs (Источник)
File mapping - это ассоциация содержимого файла с частью виртуального адресного пространства процесса. Система создает объект сопоставления файлов (также известный как объект раздела) для поддержания этой связи. Представление файла - это часть виртуального адресного пространства, которую процесс использует для доступа к содержимому файла. Отображение файлов позволяет процессу использовать как случайный ввод и вывод (I / O), так и последовательный ввод / вывод. Это также позволяет процессу эффективно работать с большим файлом данных, например с базой данных, без необходимости отображать весь файл в памяти. Несколько процессов также могут использовать файлы с отображением памяти для обмена данными.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2020, 11:49
Помогаю со студенческими работами здесь

Работа с памятью
Форумчане, доброго времени суток. Заранее извиняюсь за нубские вопросы, но должен разобраться в теме. Суть такова: написал class...

работа с памятью
Доброго времени суток! У меня возникло затруднение - нужно реализовать на языке Си программу,демонстрирующую распределение памяти таким...

Работа с памятью
Есть приложение,в нем есть label'ы. Есть ли какая-нибудь возможность средствами C++ допустим, перевести эти контролы? Если есть - дайте...

Работа с памятью
Добрый день всем. Я только начал изучение C#(раньше работал c: C++ маленько -т.е. общее представление о нем имею) и у меня вопрос, можно...

Работа с памятью
в Windows есть команды работы с памятью HeapAlloc HeapReAlloc HeapSize HeapFree HeapDestroy HeapCreate(выделяют кучу(н-бфйт),выделяют в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru