Как определить, состоит ли объект в основном из стека или динамической памяти

В настоящее время я работаю с библиотекой, которая потенциально создает тяжелые объекты. В частности, я создаю объекты, связанные с волновыми файлами.

Теперь, когда создается экземпляр объекта Wave (просто в качестве примера), есть ли хороший способ определить, где он размещается в памяти?

Например, если бы мне нужно было создать экземпляр std :: vector в стеке, я знаю, что в стеке выделено некоторое количество памяти (т.е. информация заголовка), и фактические данные контейнера создаются в куче. Поэтому по большей части мне не нужно беспокоиться о переполнении стековой памяти. Хотя у меня все еще есть возможность полностью создать экземпляр объекта в куче.

Но скажем, я не знаю о реализации объектов. Допустим, я использую библиотеку, которая создает массивный массив в стеке. Это может потенциально вызвать проблемы.

Итак, мой вопрос: как мы узнаем, насколько «тяжелым» объектом является память?

0

Решение

Я собираюсь предположить, что нестандартные методы выделения стековой памяти вне таблицы (alloca и друзья).

Учитывая это, все просто: возьмите sizeof предмет.

C ++ является статически типизированным языком, но его объекты также являются статически размера. Каждый тип имеет размер, который должен быть определен во время компиляции. Многие C ++ опирается на это. Так что, если вы обеспокоены тем, что какой-то объект занимает слишком много места в стеке, это может быть только потому, что sizeof объект занял это место.

Обратите внимание, что это не предотвратит проблемы, когда вы вызываете функцию, которая сам использует много места в стеке Вы ничего не можете сделать, чтобы обнаружить это. Но вы можете сказать, будет ли размер данного объекта «большим» или нет, по некоторому произвольному измерению.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]