posix 시스템의 표준 라이브러리를 사용하여 잠재적으로 매우 큰 문자열을 C 프로그램으로 임시 저장하는 적절한 방법을 찾고 있습니다. 문자열은 C- 함수의 선형 적 출력의 절정입니다. 이 함수를 마지막으로 호출 한 후 데이터를 더 처리 (출력)하고 싶습니다. 방대한 양의 메모리를 할당하는 것과 임시 파일을 만드는 것 사이에 간단한 절충이 있습니까? 예를 들어, 파이프에 쓰고 데이터가 필요하면이 파이프에서 다시 읽는 것을 상상할 수 있습니다. 그러나이 경우 내부적으로 데이터를 처리하는 방법과 임시 파일보다 데이터를 처리 할 방법이 확실하지 않습니다.긴 문자열 데이터의 임시 저장
답변
주로 데이터를 사용하여 수행해야하는 작업에 따라 달라집니다. 임의로 (예를 들어 정렬해야하는 경우) 무작위로 액세스해야하는 경우 잠재적으로 많은 양의 메모리를 사용하는 비용에도 불구하고 파일이 모두 메모리에 있으면 훨씬 쉽습니다.
데이터를 처리하기 위해 순차적으로 데이터에 액세스 할 수 있다면 일반적으로 데이터가 클 것으로 예상되는 경우 임시 파일을 권장합니다.
메인 스레드가 파이프를 쓰는 동안 파이프에서 데이터를 읽는 다른 스레드를 생성하지 않으면 파이프가 도움이되지 않습니다. 그렇지 않으면 파이프의 버퍼를 채우고 차단합니다 (교착 상태, 사실).
메모리에 보유하거나 디스크에 기록할지 여부에 따라 결정할 수 있습니다 (귀하의 의견에 따라 케이스별로 결정해야합니다). 데이터가 특정 임계 값 이상으로 증가한 것을 알게되면 디스크에 기록하고 나머지 데이터를 넣을 방법을 전환합니다.
파이프는 매우 작은 저장 공간 크기 (Linux 2.6 이후 2.4, 2.4에서 AFAIR보다 적게 - 4 kiB 정도)의 프로세스 간 통신 방법이므로 좋은 생각이 아닙니다.
물론! 그러나 이것을하기위한 표준 방법이있는 것처럼 보입니다. – highsciguy
- 1. 긴 텍스트 문자열 저장
- 2. 스프링로 엔티티 - 긴 문자열 저장
- 3. 데이터의 특정 열을 검색하고 문자열 배열에 저장
- 4. 긴 이진 (원시 데이터) 문자열 저장
- 5. Blackberry 응용 프로그램에 긴 문자열 리소스 저장
- 6. 트리거 데이터의 임시 테이블을 생성하십시오.
- 7. DataGridView에 임시 데이터 저장 C#
- 8. ffmpeg 데이터의 긴 문자열에서 관련 정보 추출하기
- 9. 오브젝트 데이터의 영구 저장
- 10. 임시 Javascript 변수에 임시 양식 정보 저장
- 11. 임시 개체 저장
- 12. 저장 임시 파일 이름
- 13. 표에 임시 모델 저장
- 14. 임시 파일 저장
- 15. 긴 클릭시 파일 저장
- 16. 긴 문자열 작업
- 17. 분할 긴 문자열 WP7
- 18. 긴 중복 문자열
- 19. HTML5 WebSocket을하고 긴 문자열
- 20. 면도기에 긴 문자열 정의
- 21. fslex의 Lua 긴 문자열
- 22. 긴 표현 문자열 처리
- 23. json_encode는 긴 문자열
- 24. cPickle을 사용하여 긴 문자열 저장 - 저장된 변수가 잘리지 않음
- 25. 긴 문자열 (CLOB)을 Hsqldb 데이터베이스에 저장 하시겠습니까?
- 26. Entity Framework를 사용하여 SQL 데이터베이스에 긴 문자열 저장
- 27. 이진 이미지 데이터의 효율적인 저장
- 28. 코어 데이터의 전화 번호 저장
- 29. 푸른 표 저장 데이터의 일관성
- 30. 문자열 데이터의 Mysql 열 정렬
데이터는 길고 짧을 수 있습니다. 대개의 경우 단일 행이되지만 최악의 경우에는 사용 가능한 실제 메모리를 초과 할 수도 있습니다. – highsciguy
데이터를 무작위로 액세스 할 필요는 없지만 출력에 데이터가 필요할 때마다 임시 파일을 읽고 닫을 때 오버 헤드가 발생하여 느리게 표시됩니다. 데이터가 생성되는 동안 데이터에 액세스 할 필요가 없습니다. 그래서 파이프에 쓰고 닫은 다음 다시 열어서 읽을 수는 있지만이 경우에는 파이프의 데이터가 어떻게되는지 잘 모르겠습니다. 나는 그것이 읽을 때까지 끈기가 있다고 생각한다. 하지만 그것은 임시 파일에 저장되어 있습니까? – highsciguy
일반적으로 데이터가 짧지 만 가끔 길 경우, 특정 크기 임계 값을 초과하여 임시 파일로 이동할 때까지 메모리에 버퍼링 할 수 있습니다. 코드에서 두 경우 모두 처리해야하기 때문에 더 많은 작업이 필요합니다. 필요에 따라 오버 헤드를 허용하고 항상 임시 파일을 사용하는 것이 더 간단 할 수 있습니다. – Celada