Я ищу способ обернуть выделение стека в абстрактных типах данных. Например, я хотел бы иметь вектор, который может работать строго через выделения в стеке. Мое самое большое препятствие, конечно, заключается в том, что alloca
работает только в текущем кадре стека - поэтому я не вижу простого способа обернуть это в функцию.
Пока что единственный способ сделать это - использовать макроподобные функции, которые гарантированно компилируются в заданный кадр стека. Мне не нравится этот подход, поскольку он не такой дружественный к типу, как можно было бы надеяться, и требует более подробного наименования, чем хотелось бы.
Могу ли я в любом случае получить функцию для размещения в стеке вызывающих программ? Я понимаю, что это обычно приводит к разрушению стека немедленного вызова, поэтому, скорее всего, функцию также придется как-то принудительно встроить. Мне не ясно, какие у меня есть варианты, поэтому я ищу некоторые идеи или указатели на возможные варианты.
Примечания:
Конечная цель - что-то вроде std::vector
, которая работает строго в стеке непосредственных функций. Очевидно, что он будет передан только как const
объект для вызываемых, и его жизнь заканчивается функцией.
Подход C хорош, если он лучше моего подхода на основе макросов. Хотя некоторые вспомогательные макросы также допустимы.
Я понимаю, что это довольно специфическая оптимизация, и оптимально я бы хотел иметь возможность (с флагом) включать / выключать ее (используя для отладки обычный std :: vector). Это дало бы незначительный прирост скорости для значительных частей нашего кода, но, вероятно, недостаточно, чтобы оправдать невозможность его чтения из-за слишком большого числа нечетных конструкций.
Ответ : Скорее всего, это невозможно, и будет работать только макроподход.