February 2026

S M T W T F S
1234567
891011121314
15161718192021
22232425262728

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Tuesday, January 26th, 2016 04:26 pm
So, you've got a code in C that needs to allocate X objects of size Y. So, you start with malloc(X*Y). Then you discover X*Y may produce overflow, so you make function alloc(X, Y) that checks for overflows.

And then of course everybody starts using it as alloc(1, X*Y). Because it's the same thing, right?
Wednesday, February 17th, 2016 03:06 am (UTC)
STL container аллокирует структуры фиксированного размера. Сами объекты могут иметь данные переменного размера, но это будут ссылки на отдельно аллокированные буфера. Т.е. при расширении контейнера непойманного переполнения не произойдет, если только не было арифметического переполнения при вычислении количества заказанных объектов (в штуках, а не в байтах их памяти).

"На Java при переполнении буфера будет IndexOutOfBounds" - это я знаю. Я о возможности арифметического переполнения при целых вычислениях (если результат не используется потом для индекса).

можно и STL container сделать который будет проверять IndexOutOfBounds.

Wednesday, February 17th, 2016 09:02 am (UTC)
Нормально всё туда пакуется: корневая структура фиксированного размера с полями ссылающимися на переменные данные (это зачастую другие STL container ы).

> то есть если вам надо сделать 20 миллионов обьектов, то вы собираетесь делать 20 миллионов аллокаций?

1. Не я, а STL автоматически.
2. Не 20 миллионов аллокаций, а намного меньше больших кусков (в которых STL allocator автоматически разместит эти 20 миллионов данных меньших размеров).

Кстати STL и автоматически освободит всё когда станет ненужным. Забыл когда free() или delete вызывал - обычно просто STL container автоматические переменные и всё само освобождается когда выходит из scope, или поле в объекте тогда освобождается когда объект деструктируется.