Информация об изменениях

Сообщение Re[4]: Достаточно ли знать С без знания С++ для устройства н от 07.09.2014 1:59

Изменено 07.09.2014 2:08 eskimo82

S>раз здесь собрались матерые Сишники
S>подскажите пожалуйста как лучше решить такую задачу на С
S>нужен динамический список (лучше array но можно list)
S>который динамически меняет размер от 0 до 0.5G +- каждые несколько секунд
Можно подробнее — что за список ?

S>софтина серверная 24x7, просто зарезервировать полгига (может не хватить) на все время работы программы незлья пользователь не поймет этого

Что за система ? Можно зарезервировать часть виртуального адресного пространства, но не коммитить физические страницы.
Линукс, кстати, так и делает — пока в страницу ничего не запишеш, её и как бы и нет. Так что там можеш спокойно аллок сделать и на полгига, но если физической памяти (вместе со свопом) хватать не будет то могут и прибить.

если просто нужен большой массив — можно приметить патерн "разреженный массив". Т.е. весь массив разбивается на страницы (или на более глубокую иерархию) и аллоцирууются только нужные страницы. Кстати, одну из реализаций можно подсмотреть в ядре — там есть специальный обьект.
Re[4]: Достаточно ли знать С без знания С++ для устройства н
S>раз здесь собрались матерые Сишники
S>подскажите пожалуйста как лучше решить такую задачу на С
S>нужен динамический список (лучше array но можно list)
S>который динамически меняет размер от 0 до 0.5G +- каждые несколько секунд
Можно подробнее — что за список ?

S>софтина серверная 24x7, просто зарезервировать полгига (может не хватить) на все время работы программы незлья пользователь не поймет этого

Что за система ? Можно зарезервировать часть виртуального адресного пространства, но не коммитить физические страницы.
Линукс, кстати, так и делает — пока в страницу ничего не запишеш, её и как бы и нет. Так что там можеш спокойно аллок сделать и на полгига, но если физической памяти (вместе со свопом) хватать не будет то могут и прибить.

Если просто нужен большой массив — можно приметить патерн "разреженный массив". Т.е. весь массив разбивается на страницы (или на более глубокую иерархию) и аллоцирууются только нужные страницы. Кстати, одну из реализаций можно подсмотреть в ядре — там есть специальный обьект.
Если массив "дышит" с какой-то переиодичностью, то хвостовые страницы можно отдавать системе с некотрым таймаутом, большим чем эта периодичность.