LINUX.ORG.RU

История изменений

Исправление Dendy, (текущая версия) :

Получается, что за единичную экономию на одной аллокации мы платим перманентными тормозами при вызове любых методов на протяжении всей жизни приложения. Стоит ли оно того?

Давайте сравним с реализацией Qt. Внутри каждого (!) метода они сначала разименовывают указатель на приватные данные и сохраняют его в локальной переменной. В моём же случае указатель вычисляется прибавлением к this смещения. Да, сейчас указатель this так же разименовывается, чтобы посчитать смещение до Private. Но если поменять местами области памяти вот так: <размер класса> <приватные данные> <данные класса>, то смещение до приватных данных внутри to_private() вычисляется на этапе компиляции через sizeof(Private). То-есть оно уже должно быть быстрее чем в Qt.

Исходная версия Dendy, :

Получается, что за единичную экономию на одной аллокации мы платим перманентными тормозами при вызове любых методов на протяжении всей жизни приложения. Стоит ли оно того?

Давайте сравним с реализацией Qt. Внутри каждого (!) метода они сначала разименовывают указатель на приватные данные и сохраняют его в локальной переменной. В моём же случае указатель вычисляется прибавлением к this смещения. Да, сейчас указатель так же разименовывается, чтобы посчитать смещение до Private. Но если поменять местами области памяти вот так: <размер класса> <приватные данные> <данные класса>, то смещение до приватных данных внутри to_private() вычисляется на этапе компиляции через sizeof(Private). То-есть оно уже должно быть быстрее чем в Qt.