매우 큰 파일을 읽어오기

urmajest의 이미지

안녕하세요

C++에서 10GB정도 되는 큰 파일을 읽어오려고 하는데

어떻게 하면 가능할까요?

예전에 비슷한 쓰레드를 본 적이 있는거 같은데

검색해도 찾을 수가 없네요 -_-

그럼 도움 부탁드립니다 ^^

goodfiend의 이미지

전 데이터베이스 시간에 비슷한 내용을 얼핏 들었던거 같네요..

근데 수업을 제대루 안 들어서 내용은 전혀 기억이...-_-;;;;;

DBMS들이 커다란 DB들을 어떻게 효율적으로 처리하는지 보시면 도움이 좀 되실겁니다.

일반적인 방법으로는 32비트 머신이 4기가 이상의 내용을 메모리에 올리는것이 불가능하겠죠.

하지만 프로그래머나 사용자 입장에서 그 이상의 메모리를 사용하는 것처럼 '보이도록' 그 아랫 레벨에서 구현하면 되지 않을까요?

DBMS는 어떤지 잘 모르겠지만 제가 생각한 방법은 캐쉬 메모리가 하는 일을 소프트웨어적으로 구현하는 것입니다.

캐쉬 메모리 -> 메모리
캐쉬 컨트롤러 -> 프로그램
메모리 엑세스 -> API 함수

API함수를 만들고 프로그래머는 API함수를 통해서 파일을 메모리로 읽어들인다면...
내부적으론 프로그램이 파일의 내용을 일부분만 메모리에 올려놓겠지만 프로그래머 입장에서 보면 파일전체를 메모리에 올려놓은것처럼 보이겠죠.

구현해본적도 없고 수업도 안들어서-_- 결코 정확한 대답은 못 되겠습니다만..;;
대충 저런식으로 구현하면 그럭저럭 파일을 읽을수는 있을거 같네요..

별로 도움안되는 주저리 같아서 죄송해요 ^^;

kslee80의 이미지

10GB 정도 되는 파일의 일부분을 읽고 싶으신건지....10GB 전체를 다 읽으실 건지..?

10GB 정도 크기의 파일의 일부분을 읽으시는 문제라면...
별다른 탈이 없을겁니다....파일시스템이 10GB 짜리 파일을 지원한다면 말이죠 -_-;;
(C++ 이라고 하시길래 첨언합니다만..iostream 을 이용하기는 힘들듯 싶어 보입니다.)

파일 시스템이 10GB 이상의 크기를 지원한다면,
System Call 에서 파일의 offset 을 결정하는 값이 8 byte 타입으로 되어 있을겁니다.
(8 byte 타입 변수를 offset 결정에 사용하면, 이론적으로 4TB 크기까지 이용 가능하죠..)

System Call 을 쓰기 싫으시다면,
fopen64() 같은 Standard I/O 함수를 이용하시는것도 괜찮겠죠...-.-;;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.