텍스트파일을 다루다가 의문점이 생겨서 그럽니다.
fopen을 할때 파일의 내용이 메모리에 올라오고 그 파일내용이 저장된 메모리의 포인터를 돌려주는건가요? 저는 디스크에서 바로 읽는건줄 알고 따로 메모리를 할당해서 파일내용을 거기에 복사했는데요. 디스크에서 바로읽으면 속도가 느릴까바...
fopen할때 이미 메모리로 로드된다면 괜한 짓 한건데.....
fopen()만 하면 파일의 내용이 메모리로 올라 오지는 않습니다.
fgetc()나 fread()를 해야 메모리로 올라 옵니다.
fopen()은 특정 파일에 대한 정보를 조사해서 FILE이라는 구조체에
해당 정보를 담는데서 일이 끝납니다.
fopen()만 하면 파일의 내용이 메모리로 올라 오지는 않습니다. fgetc()나 fread()를 해야 메모리로 올라 옵니다. fopen()은 특정 파일에 대한 정보를 조사해서 FILE이라는 구조체에 해당 정보를 담는데서 일이 끝납니다.
fopen하면 포인터를 돌려주는데 포인터라는 것 자체가 메모리영역을 가리키는 것이잖아요. 그럼 그걸 어떻게 이해해야하죠?
fopen함수는 FILE*형을 리턴하지 않습니까? FILE은
typedef struct { short level; unsigned flags; char fd; ....생략 } FILE
이런 구조체입니다. 파일 내용을 몽땅 메모리로 올리지는 않습니다.
저는 디스크에서 바로 읽는건줄 알고 따로 메모리를 할당해서 파일내용을 거기에 복사했는데요. 디스크에서 바로읽으면 속도가 느릴까바...
이미 한번은 디스크에서 읽은겁니다. 디스크에서 읽어 메모리에 올린거죠. 어떤 용도로 사용을 하시는지 모르겠지만, 파일 내용을 메모리에 두고 계속해서 참조하는게 아니라면 별 의미없습니다.
프로그램 실행중에 계속해서 사용되는 데이터라면 파싱을 해서 필요한 데이터를 따로 저장해두어야 하고 아니라면 따로 메모리에 복사본을 만들필요는 없을것 같네요.
그리고 대규모 I/O 처리 프로그램이 아니라면 파일 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]
fopen()만 하면 파일의 내용이 메모리로 올라 오지는 않습니다.
fopen()만 하면 파일의 내용이 메모리로 올라 오지는 않습니다.
fgetc()나 fread()를 해야 메모리로 올라 옵니다.
fopen()은 특정 파일에 대한 정보를 조사해서 FILE이라는 구조체에
해당 정보를 담는데서 일이 끝납니다.
그렇다면 돌려주는 포인터는 뭡니까?
fopen하면 포인터를 돌려주는데
포인터라는 것 자체가 메모리영역을 가리키는 것이잖아요.
그럼 그걸 어떻게 이해해야하죠?
fopen함수는 FILE*형을 리턴하지 않습니까? FILE은[co
fopen함수는 FILE*형을 리턴하지 않습니까? FILE은
이런 구조체입니다. 파일 내용을 몽땅 메모리로 올리지는 않습니다.
[quote]저는 디스크에서 바로 읽는건줄 알고 따로 메모리를 할당해
이미 한번은 디스크에서 읽은겁니다. 디스크에서 읽어 메모리에 올린거죠. 어떤 용도로 사용을 하시는지 모르겠지만, 파일 내용을 메모리에 두고 계속해서 참조하는게 아니라면 별 의미없습니다.
프로그램 실행중에 계속해서 사용되는 데이터라면 파싱을 해서 필요한 데이터를 따로 저장해두어야 하고 아니라면 따로 메모리에 복사본을 만들필요는 없을것 같네요.
그리고 대규모 I/O 처리 프로그램이 아니라면 파일 i/o 속도문제를 걱정할 필요는 없습니다. 그것때문에 문제가 생길일은 없다고 보여지네요. 생각보다 빨라요.
산넘어 산
댓글 달기