Описание тега stack-allocation

Это способ распределения памяти на компьютере.
0 ответов

Статическое распределение и распределение стека в дизайне компилятора

Я не ясно о том, было ли статическое и стек размещения? Является ли статическое распределение статическим и динамическое распределение стека? Тогда к чему относится распределение кучи? Как с этим связана запись активации? Я думал, что запись активац…
3 ответа

Замена C++ для C99 VLA (цель: сохранить производительность)

Я портирую код C99, который интенсивно использует массивы переменной длины (VLA), на C++. Я заменил VLA (выделение стека) классом массива, который выделяет память в куче. Падение производительности было огромным, снижение в 3,2 раза (см. Тесты ниже)…
3 ответа

Подсказки компилятора g++ для размещения в стеке

Существуют ли какие-либо методы, чтобы дать подсказке компилятору, что некоторые объекты могут иметь более статичное поведение, и размещать вещи в стеке вместо кучи? Например, строковый объект может иметь вид постоянного размера внутри некоторых фун…
04 ноя '14 в 09:19
3 ответа

Как компилятор управляет стеком времени выполнения?

На этом сайте есть много вопросов о стеке и куче. Но я хочу знать, как компилятор управляет стеком на самом деле? Распределение на основе стека определяется во время выполнения или во время компиляции? Рассмотрим следующий пример: #include <iostr…
23 дек '14 в 15:40
7 ответов

Как реализовать строку, которая размещается исключительно в стеке

В проекте около десяти лет назад мы обнаружили, что std::vectorДинамические распределения вызвали серьезную потерю производительности. В этом случае было выделено много маленьких векторов, поэтому быстрое решение состояло в том, чтобы написать векто…
14 окт '14 в 08:47
1 ответ

Явно размещенные в стеке данные

Я думаю, что в большинстве реализаций Common Lisp cons-ячейки обычно / всегда выделяются в куче (см. Почему медленное согласование в Lisp-е?) Common Lisp предоставляет возможность возврата нескольких значений из функции (используя values при возвращ…
16 окт '17 в 00:32
1 ответ

Как я могу эмулировать кадр стека в C++?

Я пишу контейнер, который использует alloca внутренне для размещения данных в стеке. Риски использования alloca кроме того, предположим, что я должен использовать это для домена, в котором я нахожусь (это отчастиallocaи частично для изучения возможн…
18 мар '18 в 01:56
1 ответ

Когда Hotspot может размещать объекты в стеке?

Поскольку где-то около Java 6, Hotspot JVM может выполнять анализ с удалением и размещать неэкранирующие объекты в стеке, а не в куче, собираемой мусором. Это приводит к ускорению сгенерированного кода и снижает нагрузку на сборщик мусора. Каковы пр…
1 ответ

Как заставить компилятор MSVC исключить размещение в стеке больших временных объектов?

Этот вопрос не является дубликатом этого или других подобных вопросов. Этот вопрос касается очистки структуры после ее инициализации и использования. Обновить Прочитав первые несколько ваших комментариев, я хотел бы уточнить мой вопрос: Как я могу з…
0 ответов

Стек выделяет неизменяемые массивы

Я делаю обширные вычисления в F# на коротких массивах uint64; Я хотел бы разместить их в стеке, чтобы избежать работы сборщика мусора. В C++ я бы сделал это: int search(int n, uint64_t* data) { while ( /* something */ ) { // ... do some computation …
1 ответ

Константный массив размера Маршалла

Я пытаюсь иметь массив выделенный стек внутри структуры. Ну указатель я имею ввиду. Но я бы хотел, чтобы распределение выполнялось без дополнительного кода, потому что я знаю размер, когда пишу код (я не хочу делать кучу new когда я создаю свою стру…
15 дек '18 в 10:56
1 ответ

Удаление объектов с членами кучи

Я работаю над реализацией bitset. Битовый набор использует массив unsigned long long хранить биты. class bitset{ typedef unsigned long long uint64; uint64* bits; ... } Поскольку мне нужен этот набор битов для хранения большого объема данных, я счита…
1 ответ

Перечисление и обработка без выделения ресурсов

Я хотел бы решить проблему огромных затрат на размещение приложений на С #. Само приложение может быть представленоTickUser класс внизу, и я хотел бы знать, как реализовать TickStream объект и DoWork а также ProcessTick методы использования данных б…
25 фев '20 в 06:09
0 ответов

Улучшения в Escape Analysis и оптимизации выделения стека в JAVA 9 и последующих версиях

Являются ли правила оптимизации распределения стека менее строгими для HotSpot Java 9-13? В Java 7 и Java 8 HotSpot распределение объектов в стеке (из-за оптимизации JVM, известной как скалярная замена объекта) возможно, но для достижения распределе…
1 ответ

Почему выделяется стековая память, когда она не используется?

Рассмотрим следующий пример: struct vector { int size() const; bool empty() const; }; bool vector::empty() const { return size() == 0; } Сгенерированный код сборки для vector::empty (по clang, с оптимизациями): push rax call vector::size() const tes…
0 ответов

Выполняет ли выделение стека через _malloca, запускает ловушку выделения, установленную через _CrtSetAllocHook

Для приложения обработки аудиосигнала в реальном времени мы хотим убедиться, что никакое распределение памяти кучи не выполняется из потоков реального времени. В качестве внутреннего инструмента отладки, используемого во время разработки, мы настрои…
30 апр '20 в 16:38
1 ответ

Тип класса для размещения стека. Почему адреса для обоих экземпляров идентификатора одинаковые?

class ID { public: ID(const std::string& name) : name_(name) {} // explicit copy constructor as my first solution but gave me same address ID(const ID& other) { name_ = other.getName(); } std::string getName() const { return name_; } private…
05 июн '20 в 18:39
1 ответ

Как я могу загрузить в стек все записи Vec <T> произвольной длины?

В настоящее время я работаю с векторами и пытаюсь убедиться, что у меня есть то, что по сути является массивом моего вектора в стеке. Я не могу позвонить Vec::into_boxed_sliceтак как я динамически выделяю место в моем. Это вообще возможно? Прочитав …
02 фев '21 в 04:54
2 ответа

Как я могу заменить член std::string на строку ограниченного размера без кучи?

У меня есть кодовая база с повсеместной структурой данных; и указанная структура имеет член std :: string. Теперь по причинам я хочу, чтобы эта кодовая база работала, когда std :: string недоступен, и фактически без динамического выделения памяти (п…
0 ответов

Возврат диапазонов из методов [закрыто]

Я родом из C++, читал о Spans и ReadOnlySpans и не очень хорошо знаком со всей системой GC C #. Мой вопрос в том, что такой метод копирует эту строку в стек, а затем удаляет ее из памяти при выходе из кадра стека, верно? Если нет, то почему это так …
24 июл '21 в 23:25