В продолжение
темыАвтор: Shmj
Дата: 22.01 10:09
, понял как лучше донести.
Вот пример:
https://www.programiz.com/online-compiler/7YubFKkFStr6c
#include <iostream>
int main() {
const char* str1 = "hello";
const char* str2 = "hello";
std::cout << "Address of str1: " << static_cast<const void*>(str1) << std::endl;
std::cout << "Address of str2: " << static_cast<const void*>(str2) << std::endl;
return 0;
}
— для вас очевидно что str1 и str2 имеют единый адрес? Разумно?
Идем далее:
https://www.programiz.com/online-compiler/9ZzBpAIuHcjzI
#include <iostream>
class MyClass {
public:
const int value;
constexpr MyClass(int v) : value(v) {}
};
int main() {
const MyClass* obj1 = new MyClass(5);
const MyClass* obj2 = new MyClass(5);
std::cout << "Address of obj1: " <<static_cast<const void*>(obj1) << std::endl;
std::cout << "Address of obj2: " << static_cast<const void*>(obj2) << std::endl;
return 0;
}
Имеем constexpr в конструкторе и const при создании — но выделяются разные участки памяти. Зачем? Сложно проверить и для всех таких constexpr/constexpr не выделять память по 100 раз?
Вроде бы мелочь, а открываются колоссальные возможности по оптимизации — как то если уже обработали такой же (с таким же адресом объект) — то можно повторно не обрабатывать а выдать из кеша. Узнал что в Dart так сделали и какие возможности открыла такая, казалось бы, мелочь — и до сих пор не могу отойти от этой мысли — насколько концепция поменялась.
Или как-то можно это сделать хитроумными способами?