В разделе 20 "Скотта Майера" C++ он утверждает:
некоторые компиляторы отказываются помещать объекты, состоящие только из двойника в регистр
При передаче встроенных типов по значению компиляторы с радостью помещают данные в регистры и быстро отправляют ints
/doubles
/floats
/etc. вместе. Однако не все компиляторы будут обрабатывать небольшие объекты с одинаковой грацией. Я могу легко понять, почему компиляторы будут обрабатывать объекты по-разному - передавать объект по значению может быть намного больше, чем копировать данные между виртуальной таблицей и всеми конструкторами.
Но до сих пор. Это кажется простой проблемой для современных компиляторов: "Этот класс невелик, возможно, я могу относиться к нему по-другому". Утверждение Мейера, казалось, подразумевало, что компиляторы должны сделать эту оптимизацию для объектов, состоящих только из int
(или char
или short
).
Может ли кто-нибудь дать дополнительную информацию о том, почему эта оптимизация иногда не бывает?