Comdiv писал(а):
Если говорить про персональные компьютеры, к которым я бы отнёс и смартфоны, то, на мой взгляд, проверка выделения памяти для объектов, меньше ~10-100 Мегабайт, является бессмысленным усложнением.
В принципе, в этом есть здравое зерно.
Запрограммировал небольшую математическую модель:
- допустим, дано 1 Гб свободной памяти
- программа равновероятно выделяет блоки памяти от 32 байт до 1 Гб, размерами равными степени двойки
- выделение происходит до тех пор, пока сумма размеров выделенной память меньше, либо равна 1 Гб
- данный тест повторяется миллион раз
- затем подсчитывается вероятность как отношение успешных попыток к сумме успешных и неуспешных.
Получились следующие результаты:
0;0.997588
1;0.99757
2;0.997554
3;0.997568
4;0.997529
5;0.997573
6;0.997563
7;0.99758
8;0.997581
9;0.997566
10;0.997571
11;0.99754
12;0.997509
13;0.997527
14;0.997461
15;0.997353
16;0.997057
17;0.996472
18;0.995243
19;0.992511
20;0.986395
21;0.972398
22;0.939715
23;0.860733
24;0.656508
25;0.0657939
Или если представить это на графике:
Вложение:
Probability.png [ 9.96 КБ | Просмотров: 7734 ]
В общем, вероятность успешного выделения блока размером 32 байта равна 99,7588%, а вероятность успешного выделения блока размером 1 Гб, если всего есть только 1 Гб, равна 6,57939%.
С другой стороны, нехватка памяти может произойти и при выделение самого малого блока и вероятность 0,24% не такая уж и маленькая. Получается, что из 400-х пользователей, у одного из них может возникнуть ошибка как раз с выделением самого маленького блока. Поэтому я считаю, что всегда необходимо проверять успешность выделения памяти.