Я ищу способ хранения потенциально очень большой строки временно с помощью программы C с использованием стандартных библиотек в системе posix. Строка является кульминацией линейного вывода C-функции. После последнего вызова этой функции я хочу обработать (вывести) данные дальше. Есть ли простой компромисс между распределением больших объемов памяти и созданием временного файла? Например, я мог бы представить себе запись в трубу и повторное чтение из этого канала, как только данные понадобятся. Но я не уверен, как данные будут обрабатываться внутренне в этом случае и будет ли это предпочтительным по сравнению с временным файлом.Временное хранение данных с длинной строкой
ответ
В основном это зависит от того, что вам нужно делать с данными. Если вам нужно получить к нему доступ случайным образом (например, если вам нужно его отсортировать), вы можете обнаружить, что это намного проще, если файл находится в памяти, несмотря на стоимость использования потенциально больших объемов памяти.
Особенно, если вы можете получить доступ к данным последовательно для его обработки, я бы рекомендовал временный файл, если вы ожидаете, что данные будут большими.
Труба не поможет вам, если вы не создадите другой поток, чтобы читать данные из трубы, пока ваш основной поток пишет это. В противном случае вы просто быстро заполните буферы и блок трубы (фактически, тупик).
Вы можете решить (в соответствии с вашим комментарием, вы должны решить это на основе случая за каждый случай), хранить ли его в памяти или записывать на диск. Если вы заметили, что данные растут с определенным порогом, вы записываете на диск и переключаете метод на оставшиеся данные.
Труба не будет хорошей идеей, так как это метод взаимодействия между процессами с очень небольшим размером памяти (около 64kiB с Linux 2.6, в 2.4, это было AFAIR еще меньше - 4 kiB или около того).
Конечно! Но мне кажется, что должен быть стандартный способ сделать это. – highsciguy
- 1. Временное хранение данных в android?
- 2. Временное хранение в PHP
- 3. Временное хранение DataList C#
- 4. Как нормализовать базу данных с длинной строкой?
- 5. Пролог: временное хранение списка
- 6. Временное хранение данных на iPad без WiFi
- 7. Временное хранение в расширении FireFox
- 8. Временное хранение массива в Метеор
- 9. Временное хранение для быстрого доступа
- 10. Использование предложения MySQL «in» с длинной строкой
- 11. Slow regexprep с очень длинной строкой
- 12. Проблема с использованием UITextField с длинной строкой
- 13. Временное хранение, отличное от БД и сеанса
- 14. Временное хранение для обработки файлов Excel
- 15. finditer зависает при сопоставлении с длинной строкой
- 16. Foreach loop - производительность с длинной строкой
- 17. Как добавить пространства с непрерывной длинной строкой
- 18. Ruby on rails обработка фоновых изображений и временное хранение данных
- 19. Временное хранение данных, введенных шагами в классе в asp.net
- 20. Временное хранение информации о кредитной карте в базе данных
- 21. Временное хранение Oracle в рамках функции
- 22. ASP.NET MVC - Безопасное временное хранение данных кредитной карты
- 23. Временное хранение очищенных данных в службах Integration Services
- 24. Сохраняет ли временное хранение конфиденциальных данных в iVar угрозу безопасности?
- 25. Временное хранение делегата для вызова позже
- 26. Временное хранение дескриптора файла в HTML5
- 27. временное хранение информации в переменных сеанса php
- 28. Как сделать размер окна самой длинной строкой
- 29. Предотвращение растягивания ярлыков tkinter длинной строкой
- 30. Как назначить элемент указателя длинной строкой?
Данные могут быть как длинными, так и короткими. В большинстве случаев это будет всего лишь одна строка, но в худшем случае она может даже превысить доступную физическую память. – highsciguy
Мне не нужен случайный доступ к данным, но мне кажется, что накладные расходы и медленная работа для меня открывать и открывать временный файл каждый раз, когда данные нужны для вывода. Обратите внимание, что мне не нужно получать доступ к данным во время их создания. Поэтому я мог писать в трубу, закрывать ее, открывать ее снова и читать, но я не уверен, что происходит с данными в трубе в этом случае. Я думаю, что это настойчиво, пока не будет прочитано. Но хранится ли он в временном файле? – highsciguy
Ну, если обычный случай заключается в том, что данные коротки, но иногда они длинны, то вы можете закрепить его в памяти до тех пор, пока он не превысит порог определенного размера, а затем переместите его во временный файл. Это больше подходит для вас, потому что вы должны обрабатывать оба случая в своем коде. В зависимости от ваших потребностей может быть проще принять накладные расходы и всегда использовать временный файл. – Celada