Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
MasterZivНу и? Топик закрываю? ТСу решать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 14:14 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
NekZMasterZivЕщё раз, ваш чисто теоретический спор лишён всякого смысла, поскольку все вызовы всего кода создания чего-то на стеке и потом вызова констуктора инлайнятся. Абсолютно по барабану, как это всё происходит. Я об этом ниже написал, переходя от голой теории к конкретике.Если переходить к конкретике, то в твоём примере никакой экземпляр класса вообще не создается - нигде, а компилятор на -O3 заменяет метод объекта и его член-переменную функциональным эквивалентом, т.е., просто фигачит jmp на rand() из main. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 16:05 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
MasterZivНу и? Топик закрываю?В общем-то, перетёрли уже всё, что только можно было перетереть и "в" и "около". Закрывай, коль надоела эта байда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 16:07 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
rdb_devЕсли переходить к конкретике, то в твоём примере никакой экземпляр класса вообще не создается - нигде, а компилятор на -O3 заменяет метод объекта и его член-переменную функциональным эквивалентом, т.е., просто фигачит jmp на rand() из main. Хе-хе, так в том-то и была суть всего, что я тебе талдычу уже третью страницу топика. Да даже на -O1 останется лишь jmp. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 16:09 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
NekZХе-хе, так в том-то и была суть всего, что я тебе талдычу уже третью страницу топика. Да даже на -O1 останется лишь jmp.Told'ычить-то ты, конечно, told'ычишь, но объекта как не было, так и нет, а мы говорим именно об объектах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 16:18 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
MasterZiv0) placement new не переопределяется. 1) код placement new -- это вызов констуктора с указанным placement-у указателем на память в виде this . 2) соответственно, код placement new всегда инлайнится. Это собственно один вызов функции.Да брось! Всё прекрасно переопределяется: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 16:21 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
rdb_devTold'ычить-то ты, конечно, told'ычишь, но объекта как не было, так и нет, а мы говорим именно об объектах. В терминал языка ассемблера вообще объектов нет, это чисто тот удобный фасад для программистов чтобы они не видели всю поднаготную. И именно такие вот оптимизации, выкидывающие вообще всякие там упоминания о твоём классе и его мемберах из итогового ассемблера, демонстрируют тебе, что нет никаких фаз выделения памяти на стеке и вызова placement new , они существуют только в твоём сознании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 16:39 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
NekZ, В терминах* ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 16:39 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
NekZВ терминал языка ассемблера вообще объектов нет, это чисто тот удобный фасад для программистов чтобы они не видели всю поднаготную.Объектов нет не в терминах ассемблера, а в терминах машинных кодов, а в терминах ассемблера он вполне себе существует и, причем, с виртуальными методами. Например, в TASM. NekZИ именно такие вот оптимизации, выкидывающие вообще всякие там упоминания о твоём классе и его мемберах из итогового ассемблера, демонстрируют тебе, что нет никаких фаз выделения памяти на стеке и вызова placement new , они существуют только в твоём сознании.Да что ты говоришь? Попробуй-ка при при максимальной оптимизации добавить квалификатор volatile к объявлению метода MyClass::f*(), к объявлению экземпляра класса собери и удивись "силе моего сознания". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 19:45 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
rdb_devДа что ты говоришь? Попробуй-ка при при максимальной оптимизации добавить квалификатор volatile к объявлению метода MyClass::f*(), к объявлению экземпляра класса собери и удивись "силе моего сознания". Давай. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. clang -O3 Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 19:56 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
NekZГде выделение памяти под объект? push rax ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 20:09 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevNekZГде выделение памяти под объект? push rax ? Нет, это пушится адрес возврата для последующей инструкции call ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 20:15 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
NekZНет, это пушится адрес возврата для последующей инструкции callЛеонид абсолютно прав! "push rax" расширяет стек вниз на 8 байт, сохраняя там значение из "rax", что равносильно (в нотации Intel): Код: asm 1. 2. Обычно, компилятор примерно так и делает, но в данном, конкретном случае, расширение кадра невелико и компилятор, почему-то, выбрал "push rax" с инициализацией памяти на стеке из регистра "rax", вместо "sub rsp, 8" без инициализации. Далее, по соглашению __cdecl, результат функции rand() помещается в регистр "eax" и мнемоника "mov dword ptr [rsp + 4], eax" указывает нам на то, что значение из регистра "eax" помещается, в старшее двойное слово расширенной части кадра стека. Сие нам говорит о том, что компилятор разместил код, расширяющий кадр стека с выравниванием на четверное слово, но, при этом, используется только старшее двойное слово - "MyClass::x", а мнемоника "mov eax, dword ptr [rsp + 4]" говорит нам о том, что в clang квалификатор volatile напрочь отключает оптимизацию, как таковую, чего не происходит, например, в гнусе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 21:11 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
rdb_dev, Да, что-то я забыл совсем, что о адресе возврата уже call сам заботится. Это если jmp юзать для вызова в новом кадре, то потребуются push и pop. А вот, кстати и ответ wikipediaSince GCC version 4.5, the stack must be aligned to a 16-byte boundary when calling a function (previous versions only required a 4-byte alignment.) push используется для CPU со stack engine как и последующие два mov'а, типа так более эффективно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 21:50 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
NekZ, только мне непонятно зачем делать push/pop, когда после любой операции модификации "rsp" для выравнивания вполне достаточно сделать "and rsp, -16". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 00:05 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
Чтобы немного разбавить офтопик, небольшая ссылка по теме :) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0847r0.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 01:19 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, если я правильно понимаю написанное, парни предлагают различать то, через что осуществляется доступ к членам/методам экземпляра класса (объекта) - через lvalue-ссылку или же через rvalue-ссылку с учётом cv-квалификаторов, а также использовать "this" в объявлении параметров метода в качестве ключевого слова для указания того, что дедукция шаблона должна осуществляться по типу lvalue/rvalue ссылки, через которую осуществляется доступ и, опять же, с учётом cv-квалификаторов. Похоже, я не одинок в своих хотелках! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 10:40 |
|
||
|
Константный экземпляр класса. Кто как делает?
|
|||
|---|---|---|---|
|
#18+
rdb_devпредлагают различать то, через что осуществляется доступ к членам/методам экземпляра класса (объекта) - через lvalue-ссылку или же через rvalue-ссылку с учётом cv-квалификаторов Это уже есть начиная с С++11. А остальное - да, предлагают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2018, 11:37 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39651583&tid=2017848]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 158ms |

| 0 / 0 |
