Skip to content

agaltsevstas/OOP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ADL

Argument-dependent lookup - поиск по аргументу, можно не указывать пространство имен к функции, если один из аргументов принадлежит к тому же пространству имен и он уже указан. Компилятор ищет функцию в пространствах имен в типах аргументов.

Alignment

Выравнивание памяти - необходимо для эффективного обращения процессора к данным в памяти. Процессору проще обращаться к данным, когда они последовательно лежат по блокам в 4 байта для 32-битной ОС /8 байт 64-битной ОС, поэтому компилятор подкладывает (padding) неиспользуемые байты для выравнивания к границам блоков памяти по 4/8 байт.

POD

Plain old data - простая структура данных (std::is_pod), занимающая непрерывную область памяти, компилятор НЕ оптимизируют поля класса/структуры: они находятся в памяти в том порядке, в котором они указаны (возможно с некоторым выравниванием - aligment), поэтому объекты такого типа можно скопировать с помощью memcpy, сериализировать по сети и воссоздать. Противоположность POD типа — управляемая структура данных, которую компилятор может оптимизировать поля класса/структуры по усмотрению (переставить местами), такая перестановка может серьёзно сэкономить память, но нарушает совместимость. Объекты POD быстрее создаются и копируются, чем объекты управляемой структуры данных.
C++20: POD типа уже не будет, останутся только тривиальный тип и тип со стандартным устройством.
Имеет характеристики: тривиального класса/структуры (trivial type) + со стандартным устройством (standard layout).

Aligment

Выравнивание памяти (aligment) - необходимо для эффективного обращения процессора к данным в памяти. Процессору проще обращаться к данным, когда они последовательно лежат по блокам в 4 байта для 32-битной ОС /8 байт 64-битной ОС, поэтому компилятор подкладывает (padding) неиспользуемые байты для выравнивания к границам блоков памяти по 4/8 байт.

Trivial type

Тривиальный класс/структура (std::is_trivial) - занимает непрерывную область памяти, поэтому компилятор может самостоятельно выбирать способ упорядочивания членов Характеристики: — конструктор: явно отсутствующий или явно задан как default. — копирующий конструктор: явно отсутствующий или явно задан как default. — перемещающий конструктор: явно отсутствующий или явно задан как default. — копирующий оператор присваивания: явно отсутствующий или явно задан как default. — перемещающий оператор присваивания: явно отсутствующий или явно задан как default. — деструктор: явно отсутствующий или явно задан как default.

  • все поля и базовые классы — тоже тривиальные типы.
  • все поля класса - не инициализированны.
  • поля могут иметь разный модификатор доступа (public/protected/private).
  • не имеет виртуальных методов (включая деструктор).
  • не имеет виртуальных базовых типов (класс/структура).

Standard layout

Класс/структура со стандартным устройством (std::is_standard_layout). Характеристики:

  • не имеет виртуальных методов.
  • не имеет виртуальных базовых типов (класс/структура).
  • не имеет полей-ссылок.
  • все поля имеют одинаковый модификатор доступа (public/protected/private).
  • нельзя наследоваться от наследуемого класса/структуры.
  • все поля и базовые классы — тоже типы со стандартным устройством.

Видео:

Уроки С++. Изучай и оптимизируй! Советы С++. POD типы

Сайты:

Тривиальные типы, типы стандартной структуры, POD и типы литералов
Шпаргалка по аббревиатурам C++ и не только. Часть 1: C++
Разбор понятий: trivial type, standard layout, POD
Простая структура данных