Сообщение Про идентичность const от 22.01.2025 13:32
Изменено 24.01.2025 8:29 Shmj
Про идентичность const
В продолжение темы
Вот пример: https://www.programiz.com/online-compiler/7YubFKkFStr6c
— для вас очевидно что str1 и str2 имеют единый адрес? Разумно?
Идем далее: https://www.programiz.com/online-compiler/5m6wZCwsBzSCD
Имеем constexpr в конструкторе и constexpr при создании — но выделяются разные участки памяти. Зачем? Сложно проверить и для всех таких constexpr/constexpr не выделять память по 100 раз?
Вроде бы мелочь, а открываются колоссальные возможности по оптимизации — как то если уже обработали такой же (с таким же адресом объект) — то можно повторно не обрабатывать а выдать из кеша. Узнал что в Dart так сделали и какие возможности открыла такая, казалось бы, мелочь — и до сих пор не могу отойти от этой мысли — насколько концепция поменялась.
Или как-то можно это сделать хитроумными способами?
Автор: Shmj
Дата: 22.01.25
, понял как лучше донести.Дата: 22.01.25
Вот пример: 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/5m6wZCwsBzSCD
#include <iostream>
class MyClass {
public:
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 в конструкторе и constexpr при создании — но выделяются разные участки памяти. Зачем? Сложно проверить и для всех таких constexpr/constexpr не выделять память по 100 раз?
Вроде бы мелочь, а открываются колоссальные возможности по оптимизации — как то если уже обработали такой же (с таким же адресом объект) — то можно повторно не обрабатывать а выдать из кеша. Узнал что в Dart так сделали и какие возможности открыла такая, казалось бы, мелочь — и до сих пор не могу отойти от этой мысли — насколько концепция поменялась.
Или как-то можно это сделать хитроумными способами?
Про идентичность const
В продолжение темы
Вот пример: https://www.programiz.com/online-compiler/7YubFKkFStr6c
— для вас очевидно что str1 и str2 имеют единый адрес? Разумно?
Идем далее: https://www.programiz.com/online-compiler/5m6wZCwsBzSCD
Имеем constexpr в конструкторе и const при создании — но выделяются разные участки памяти. Зачем? Сложно проверить и для всех таких constexpr/constexpr не выделять память по 100 раз?
Вроде бы мелочь, а открываются колоссальные возможности по оптимизации — как то если уже обработали такой же (с таким же адресом объект) — то можно повторно не обрабатывать а выдать из кеша. Узнал что в Dart так сделали и какие возможности открыла такая, казалось бы, мелочь — и до сих пор не могу отойти от этой мысли — насколько концепция поменялась.
Или как-то можно это сделать хитроумными способами?
Автор: Shmj
Дата: 22.01.25
, понял как лучше донести.Дата: 22.01.25
Вот пример: 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/5m6wZCwsBzSCD
#include <iostream>
class MyClass {
public:
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 так сделали и какие возможности открыла такая, казалось бы, мелочь — и до сих пор не могу отойти от этой мысли — насколько концепция поменялась.
Или как-то можно это сделать хитроумными способами?