C++0x와 관련된 글을 6월 30일 이후로 처음 올립니다.
그 동안 C++0x에 관심이 없다던가 전달할 것이 없는 것은 아니었지만 근래에는 Parallel에 집중하고 있어서 글을 올릴 수가 없었습니다.
현재까지 공개된 C++0x를 보면 여러가지 다양한 기능이 추가 되었습니다만 현재 VC++ 10 Beta1에는 핵심 기능과 그 외 자잘한 몇가지 것들만 구현되어 있습니다. 다음 Beta2나 정식 버전이 나오면 더 많은 것들이 구현 되어 있으리라 생각합니다.
제가 자주 가는 C++ 관련된 좋은 글이 올라온 사이트에서 본 C++0x에서 추가된 새로운 기능을 하나 소개하려고 합니다.
지금은 테라바이트 시대
제 친구 중 가장 먼저 PC를 구입했을 때가 90년대 초반으로 IBM PC XT 제품으로 하드 디스크 용량이 80 메가 였고, 95년에 처음 제 PC를 구입할 때는 인텔 486 DX 칩을 사용한 제품으로 그 당시 일반적인 하드 디스크 용량은 256 메가였습니다. 95년에 처음 PC를 구입할 때는 정말 엄청나게 크다고 생각했었습니다.^^
그런데 요즘 PC를 구입하시는 분들은 테라바이트 단위의 하드 디스크를 장착을 하고 있더군요.
C++이 나왔을 때는
C++은 꽤 오래 전에 만들어진 언어입니다. 95년 보다도 더 이전에 나왔습니다.
ㅊC+++이 처음 만들어졌을 때나 처음 표준이 완성 되었을 때를 지금과 비교하면 보통 사용하는 파일의 크기는 대부분 작은 편이었습니다.
ㅇ아마 저처럼 90년대 중반 이전에 PC를 사용한 분들은 1기가 이상의 파일을 사용할 것이라고는 생각하지 못했을 겁니다(참고로 90년대에 PC 통신으로는 1메가 다운로드도 무척 긴 시간이 걸렸습니다^^).
ㄱ그래서 C++의 I/O Stream에서는 int나 long 타입으로 파일의 위치를 조작하는 것을 생각하고 만들어져 있습니다. 하지만 요즘은 하나의 파일이 워낙 큰 용량을 차지하고 있어서 문제가 됩니다.
C++0x에서 대용량 파일의 위치 조작하기
현재 C++의 I/O Stream에서는 아직 long long 타입이 들어가 있지 않으므로 int나 long 타입의 크기를 넘어서는 파일의 위치 조작에는 문제가 있습니다.
그러나 C++0x에서는 N2926의 제안으로 이 문제가 해결 되었습니다.
변경점으로는
char_traits 에서는
|
현재 |
C++0x |
|
typedef OFF_T off_type; |
typedef unspecified-type off_type; |
|
typedef POS_T pos_type; |
typedef unspecified-type pos_type; |
<ios> 에서는
|
현재 |
C++0x |
|
typedef OFF_T streamoff; |
typedef implementation-defined streamoff; |
typedef POS_T streamsize; |
typedef implementation-defined streamsize; |
VC++ 10 Beta1에서도 사용할 수 있습니다.
서두에 C++0x에서는 공개된 기능이지만 VC++ 10 Beta1에서는 구현되어 있지 않는 것들이 있다고 했는데 지금 소개한 것은 구현되어 있습니다.
지금 당장 테스트 해 보세요 ^^
ps.1 : 위 글은 여기에 올라온 글을 다듬은 것입니다. 예제코드는 따로 파일로 올립니다.
http://d.hatena.ne.jp/faith_and_brave/20090904/1252051994
ps.2 : 팀 블로그에 올기기 애매한 C++0x에 대한 글을 제 블로그에 가끔씩 올리고 있으니 틈날 때 와서 보세요^^
'C++0x' 카테고리의 다른 글
| VC++ 10에 구현된 C++0x의 코어 언어 기능들 (1) | 2010/04/12 |
|---|---|
| nullptr (1) | 2010/01/28 |
| 대용량 파일 조작을 위한 C++0x의 변화 (0) | 2009/09/07 |
| [VC++] 14. decltype (0) | 2009/06/30 |
| [VC++] 13. Lambda - 네 번째 (3) | 2009/06/23 |
| [VC++] 12. Lambda - 세 번째 (0) | 2009/06/16 |
main.cpp




댓글을 달아 주세요