안녕하세요
C++에서 10GB정도 되는 큰 파일을 읽어오려고 하는데
어떻게 하면 가능할까요?
예전에 비슷한 쓰레드를 본 적이 있는거 같은데
검색해도 찾을 수가 없네요 -_-
그럼 도움 부탁드립니다 ^^
전 데이터베이스 시간에 비슷한 내용을 얼핏 들었던거 같네요..
근데 수업을 제대루 안 들어서 내용은 전혀 기억이...-_-;;;;;
DBMS들이 커다란 DB들을 어떻게 효율적으로 처리하는지 보시면 도움이 좀 되실겁니다.
일반적인 방법으로는 32비트 머신이 4기가 이상의 내용을 메모리에 올리는것이 불가능하겠죠.
하지만 프로그래머나 사용자 입장에서 그 이상의 메모리를 사용하는 것처럼 '보이도록' 그 아랫 레벨에서 구현하면 되지 않을까요?
DBMS는 어떤지 잘 모르겠지만 제가 생각한 방법은 캐쉬 메모리가 하는 일을 소프트웨어적으로 구현하는 것입니다.
캐쉬 메모리 -> 메모리 캐쉬 컨트롤러 -> 프로그램 메모리 엑세스 -> API 함수
API함수를 만들고 프로그래머는 API함수를 통해서 파일을 메모리로 읽어들인다면... 내부적으론 프로그램이 파일의 내용을 일부분만 메모리에 올려놓겠지만 프로그래머 입장에서 보면 파일전체를 메모리에 올려놓은것처럼 보이겠죠.
구현해본적도 없고 수업도 안들어서-_- 결코 정확한 대답은 못 되겠습니다만..;; 대충 저런식으로 구현하면 그럭저럭 파일을 읽을수는 있을거 같네요..
별로 도움안되는 주저리 같아서 죄송해요 ^^;
http://www.suse.de/~aj/linux_lfs.htmlhttp://bbs.kldp.org/viewtopic.php?t=20230
10GB 정도 되는 파일의 일부분을 읽고 싶으신건지....10GB 전체를 다 읽으실 건지..?
10GB 정도 크기의 파일의 일부분을 읽으시는 문제라면... 별다른 탈이 없을겁니다....파일시스템이 10GB 짜리 파일을 지원한다면 말이죠 -_-;; (C++ 이라고 하시길래 첨언합니다만..iostream 을 이용하기는 힘들듯 싶어 보입니다.)
파일 시스템이 10GB 이상의 크기를 지원한다면, System Call 에서 파일의 offset 을 결정하는 값이 8 byte 타입으로 되어 있을겁니다. (8 byte 타입 변수를 offset 결정에 사용하면, 이론적으로 4TB 크기까지 이용 가능하죠..)
System Call 을 쓰기 싫으시다면, fopen64() 같은 Standard I/O 함수를 이용하시는것도 괜찮겠죠...-.-;;
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
DBMS
전 데이터베이스 시간에 비슷한 내용을 얼핏 들었던거 같네요..
근데 수업을 제대루 안 들어서 내용은 전혀 기억이...-_-;;;;;
DBMS들이 커다란 DB들을 어떻게 효율적으로 처리하는지 보시면 도움이 좀 되실겁니다.
일반적인 방법으로는 32비트 머신이 4기가 이상의 내용을 메모리에 올리는것이 불가능하겠죠.
하지만 프로그래머나 사용자 입장에서 그 이상의 메모리를 사용하는 것처럼 '보이도록' 그 아랫 레벨에서 구현하면 되지 않을까요?
DBMS는 어떤지 잘 모르겠지만 제가 생각한 방법은 캐쉬 메모리가 하는 일을 소프트웨어적으로 구현하는 것입니다.
캐쉬 메모리 -> 메모리
캐쉬 컨트롤러 -> 프로그램
메모리 엑세스 -> API 함수
API함수를 만들고 프로그래머는 API함수를 통해서 파일을 메모리로 읽어들인다면...
내부적으론 프로그램이 파일의 내용을 일부분만 메모리에 올려놓겠지만 프로그래머 입장에서 보면 파일전체를 메모리에 올려놓은것처럼 보이겠죠.
구현해본적도 없고 수업도 안들어서-_- 결코 정확한 대답은 못 되겠습니다만..;;
대충 저런식으로 구현하면 그럭저럭 파일을 읽을수는 있을거 같네요..
별로 도움안되는 주저리 같아서 죄송해요 ^^;
이게 도움이 될까요?
http://www.suse.de/~aj/linux_lfs.html
http://bbs.kldp.org/viewtopic.php?t=20230
음?
10GB 정도 되는 파일의 일부분을 읽고 싶으신건지....10GB 전체를 다 읽으실 건지..?
10GB 정도 크기의 파일의 일부분을 읽으시는 문제라면...
별다른 탈이 없을겁니다....파일시스템이 10GB 짜리 파일을 지원한다면 말이죠 -_-;;
(C++ 이라고 하시길래 첨언합니다만..iostream 을 이용하기는 힘들듯 싶어 보입니다.)
파일 시스템이 10GB 이상의 크기를 지원한다면,
System Call 에서 파일의 offset 을 결정하는 값이 8 byte 타입으로 되어 있을겁니다.
(8 byte 타입 변수를 offset 결정에 사용하면, 이론적으로 4TB 크기까지 이용 가능하죠..)
System Call 을 쓰기 싫으시다면,
fopen64() 같은 Standard I/O 함수를 이용하시는것도 괜찮겠죠...-.-;;
댓글 달기