Date: Fri, 25 Aug 2023 23:07:50 +0800
Hi all experts,
boost::compressed_pair is widely used as a replacement for std::pair in
order to save storage when one of the data members is an empty class.
The __compressed_pair helper class, which is similar to
boost::compressed_pair, is also widely used in libc++.
I wonder if we could get this compression optimization at almost no cost if
add the C++ [[no_unique_address]] attribute to the members of std::pair:
namespace std {
template<class T1, class T2>
struct pair {
using first_type = T1;
using second_type = T2;
[[no_unique_address]] T1 first; // <- here
[[no_unique_address]] T2 second; // <- here
};
}
This looks reasonable to me, and almost achieves the equivalent of
boost::compressed_pair.
What do you guys think about this? This seems like a great enhancement to
me. Or does this kind of practice bring certain issues?
Comments are very welcome.
Hewill
boost::compressed_pair is widely used as a replacement for std::pair in
order to save storage when one of the data members is an empty class.
The __compressed_pair helper class, which is similar to
boost::compressed_pair, is also widely used in libc++.
I wonder if we could get this compression optimization at almost no cost if
add the C++ [[no_unique_address]] attribute to the members of std::pair:
namespace std {
template<class T1, class T2>
struct pair {
using first_type = T1;
using second_type = T2;
[[no_unique_address]] T1 first; // <- here
[[no_unique_address]] T2 second; // <- here
};
}
This looks reasonable to me, and almost achieves the equivalent of
boost::compressed_pair.
What do you guys think about this? This seems like a great enhancement to
me. Or does this kind of practice bring certain issues?
Comments are very welcome.
Hewill
Received on 2023-08-25 15:08:02