LINUX.ORG.RU

Небольшой вопрос по памяти


0

1

Собственно сабж, а то я немного запутался
есть png файл 4 611 bytes, т.е. на диске он занимает 2xpagesize() (8 192 bytes при getpagesize()=4096).
Когда этот файл загружается в память он тоже занимает (выравнивается) в размер 2xpagesize()?

или на него могут действовать какие методы сжатия самого пнг что он меньше в памяти займет?

Boy_from_Jungle ★★★★
() автор топика
Ответ на: комментарий от Boy_from_Jungle

Как он в памяти может меньше занять-то? Скорее больше будет, если он в распакованном виде будет, ну или столько же. А выравниваться будет или нет — зависит от программы.

vkos ★★
()

>Когда этот файл загружается в память он тоже занимает (выравнивается) в размер 2xpagesize()?

да. Если конечно его в BITMAP не распаковали.

drBatty ★★
()
Ответ на: комментарий от Boy_from_Jungle

Таки будет.

#include <stdio.h>
#include <stdlib.h>
int main() {
        FILE *f = fopen("abc.png", "r");
        char *mem = malloc(8192);
        fread(mem+25, 6000, 1, f);
        printf("%d", mem);
        return 0;
}

Так понятно или ещё что-то объяснить?

vkos ★★
()

> есть png файл 4 611 bytes, т.е. на диске он занимает 2xpagesize() (8 192 bytes при getpagesize()=4096).

Нет. pagesize к диску отношения не имеет и сколько файл занимает на диске зависит только от файловой системы и размера её блока.

Когда этот файл загружается в память он тоже занимает (выравнивается) в размер 2xpagesize()?

Нет. Это зависит от огромной кучи факторов включая прежде всего используемый аллокатор. Может вообще не выравниваться, может по границам страниц, может меньше, может больше. На FreeBSD'шном системном аллокаторе у меня выравнивается по 8192, на dlmalloc и ptmalloc по 4624. А в некоторых случаях правильнее будет выделить большой кусок памяти и размещать в нём объекты без выравнивания - тогда от не будет занимать ни байтом больше своих 4611.

slovazap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.