У меня есть структура, в которой я бы хотел включить статическое хранилище. Это векторный тип на DSP, и случайное объявление его в стеке является распространенной ошибкой для пользователей, которая вызывает переполнение стека, проблемы с производительностью или и то, и другое. Насколько я знаю, это невозможно, но мне любопытно, знает ли кто-нибудь еще лучше.Принудительное статическое хранение во время компиляции
Пример использования:
static Vector64 v1; // OK
static Vector64 v2; // OK
static Vector64 result; // OK
result = v1 * v2; // OK
Vector64 v3; // I would like this to give a compile-time error
Vector64 v4;
result = v3 * v4;
Мой компилятор Clang/LLVM 3.2 и атрибуты компилятора конкретных справедливая игра.
Я знаю, как (с C++) разрешать только динамическое хранилище (предотвращать статические и автоматические) или предотвращать динамическое хранилище (разрешено только статическое и автоматическое), но я не считаю, что вы можете отличить статическую память от автоматического хранения продолжительность. –
Кроме того, было бы ужасно сложно дать предупреждение о времени выполнения (включите это только в режиме отладки, пожалуйста). –
Можете ли вы использовать собственное распределение кучи?Вы можете скрыть экземпляр 'Vector64' за фабрикой и создать полностью контролируемое хранилище кучи, используя специальный распределитель (при необходимости выровненный). – Drop