데이터를 파일에 쓰고 다시 읽을 수있는 파일 형식을 작성해야합니다.빨리 읽을 수 있도록 파일에 이진 데이터를 쓰는 방법은 무엇입니까?
상당히 큰 데이터 블록을 다시 읽을 수 있어야합니다. (대개의 경우 저장소가 항상 연속적으로 구현되므로) 큰 블록의 데이터를 std::vector
에 블리팅해야합니다.
그러나 파일을 작성할 때 int 및 다른 유형의 정렬 및 크기에 제약 조건을 적용하는 방법을 모릅니다.
어떻게해야합니까? Q6600 (x86)에서 gcc를 buntu linux에 사용하고 있습니다. 그냥 예를 들어
:
struct Vertex
{
float point [3];
float normal [3];
float texcoord [2];
}
은 나중에, 데이터는
std::vector<Vertex>
에 저장됩니다. 나는
__attribute__
을 사용하는 것에 대해 생각해 봤고 포장/정렬함으로써 다른 플랫폼에서 더 이식성이 높아질 것이라고 생각했습니다.
편집 : 이미 사양을 만들었으며 사용하려고합니다. 데이터의 가장 큰 비트는 꼭지점과 지표이므로 큰 블록으로 읽습니다. 예를 들어 큰 사양의 한 부분 : VertexGroup은 특성을 공유하는 정점 그룹입니다. 한 번에 하나의 자료 만 저장할 수 있으므로 메쉬에 포함 된 자료가 많아야합니다.
<uint> thisid # Of this VertexGroup
<string> name
<uint> materialId # A material
<uint> vertexCount
for (vetexCount):
<3xfloat> point
<3xfloat> normal
<2xfloat> texcoord
<uint> triangleCount
for (triangleCount):
<3xuint> indices
부스트 직렬화는 얼마나 빠릅니까? 이것은 많은 번거 로움을 덜어 줄 수 있으며 어떻게 작동하는지 보는 것이 흥미로울 것입니다. 나는 그것이 배열을 처리하는 방법, 그리고 그것이 얼마나 빠릅니까 (파일에 1000000 버텍스가 있기 때문에 전체 데이터 블럭을 메모리에 blit하지 않는 것이 더 느릴 것입니다). – solinent
여기에 비슷한 질문이 있습니다. http://stackoverflow.com/questions/321619/c-serialization-performance –