fopen하면 파일내용이 메모리에 올라오나요?

realrise의 이미지

텍스트파일을 다루다가 의문점이 생겨서 그럽니다.

fopen을 할때 파일의 내용이 메모리에 올라오고
그 파일내용이 저장된 메모리의 포인터를 돌려주는건가요?
저는 디스크에서 바로 읽는건줄 알고
따로 메모리를 할당해서 파일내용을 거기에 복사했는데요.
디스크에서 바로읽으면 속도가 느릴까바...

fopen할때 이미 메모리로 로드된다면
괜한 짓 한건데.....

taeyeung의 이미지

fopen()만 하면 파일의 내용이 메모리로 올라 오지는 않습니다.

fgetc()나 fread()를 해야 메모리로 올라 옵니다.

fopen()은 특정 파일에 대한 정보를 조사해서 FILE이라는 구조체에

해당 정보를 담는데서 일이 끝납니다.

realrise의 이미지

taeyeung wrote:
fopen()만 하면 파일의 내용이 메모리로 올라 오지는 않습니다.

fgetc()나 fread()를 해야 메모리로 올라 옵니다.

fopen()은 특정 파일에 대한 정보를 조사해서 FILE이라는 구조체에

해당 정보를 담는데서 일이 끝납니다.

fopen하면 포인터를 돌려주는데
포인터라는 것 자체가 메모리영역을 가리키는 것이잖아요.
그럼 그걸 어떻게 이해해야하죠?

버려진의 이미지

fopen함수는 FILE*형을 리턴하지 않습니까? FILE은

typedef struct {
    short level;
    unsigned flags;
    char fd;
....생략
} FILE

이런 구조체입니다. 파일 내용을 몽땅 메모리로 올리지는 않습니다.

dudungsil의 이미지

Quote:
저는 디스크에서 바로 읽는건줄 알고
따로 메모리를 할당해서 파일내용을 거기에 복사했는데요.
디스크에서 바로읽으면 속도가 느릴까바...

이미 한번은 디스크에서 읽은겁니다. 디스크에서 읽어 메모리에 올린거죠. 어떤 용도로 사용을 하시는지 모르겠지만, 파일 내용을 메모리에 두고 계속해서 참조하는게 아니라면 별 의미없습니다.

프로그램 실행중에 계속해서 사용되는 데이터라면 파싱을 해서 필요한 데이터를 따로 저장해두어야 하고 아니라면 따로 메모리에 복사본을 만들필요는 없을것 같네요.

그리고 대규모 I/O 처리 프로그램이 아니라면 파일 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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.