아니요. 당신이 알아 낸대로, 당신은 할 수 없습니다. 컴파일러는 데이터 구조의 크기를 신뢰할 수 있고 지속적으로 파악하여 작업을 수행해야합니다.
페이지 데이터가 내 struct
의 유일한 콘텐츠가 아니라고 가정합니다. 텍스트와 함께 거기에 페이지에 대한 헤더/관리 정보가있을 것입니다.
일반적인 해결책은 구조체가 실제 텍스트를 가리키는 char *
을 포함하는 것입니다. 그 텍스트는 메모리 크기가 malloc()
'd이거나 calloc()
이 될 수 있습니다. 아아, 이것은 구조체를 움직이는 작업을 할 때마다 구조체와 함께 외부 텍스트를 이동하는 것을 기억해야한다는 것을 의미하며 구조체를 제거하면 메모리를 관리하여 메모리를 관리합니다. 일반적인 C 두통.
편집
이런 종류의 일을 할 수있는 분별있는 "표준"방법이 있습니다.
typedef char *page_ptr;
int page_size = discover_page_size();
int max_page_count = discover_max_page_count();
int pages_stored = 0;
page_ptr *page_pointers = calloc(max_page_count, sizeof(page_ptr));
char *pages = calloc(max_page_count * page_size, sizeof(char));
page_pointers[0] = pages;
int i;
for (i=1; i<max_page_count; i++) {
page_pointers[i] = page_pointers[i-1] + page_size;
}
지금 당신은 당신은 페이지 당 하나의 포인터의 오버 헤드가
read(filedesc, page_pointers[page_count++], page_size);
또는
memmove(page_pointers[69], page_pointers[42], page_size);
같은 물건을, 페이지의 배열로 page_pointers 처리 할 수 있습니다 : 여기 제안입니다 (틀림없이 받아 들일 만하다), 페이지는 물리적으로 연속적으로 메모리에있다. 뭘 더 물어볼 수 있니? :)
C 또는 C++을 사용하고 있습니까? C++은 이런 종류의 많은 가능성을 가지고 있습니다. –
#define page_size 4096을 사용하지 않는 이유는 무엇입니까? –
@Brian : C 또는 C++ ... –