Если у вас есть несколько миллиардов небольших объектов, обеспечение того, что эти объекты являются POD, может быть огромным преимуществом.
- Вы можете вызывать из них значительную часть вызовов calloc () или malloc (), что экономит вам миллионы обращений к конструкторам.
- Для сохранения, а не для потоковой передачи объектов по одному, вы можете использовать fwrite () и fread () весь их кусок для скорости.
Недостаток в том, что вы должны сохранять гибкость, чтобы обрабатывать не-ООП POD в вашем коде. POD - это запасной вариант старого кода C, где вы знаете и заботитесь о расположении ваших данных. Когда этот макет четко определен, вы можете оптимизировать его, работая с большими кусками памяти, а не с множеством маленьких кусочков.
Обратите внимание, что то, что я описал выше, относится к тривиально выложенным конструкциям. Другими словами, если вы вызовете std :: is_trivially_copyable () type_trait для этого типа, вы получите true. Требования к POD на самом деле даже сильнее, чем к тривиально копируемым структурам. Итак, то, что я только что описал выше, относится ко всем POD и даже к некоторым не POD, которые оказываются тривиально копируемыми.