В настоящее время я работаю с библиотекой, которая потенциально создает тяжелые объекты. В частности, я создаю объекты, связанные с волновыми файлами.
Теперь, когда создается экземпляр объекта Wave (просто в качестве примера), есть ли хороший способ определить, где он размещается в памяти?
Например, если бы мне нужно было создать экземпляр std :: vector в стеке, я знаю, что в стеке выделено некоторое количество памяти (т.е. информация заголовка), и фактические данные контейнера создаются в куче. Поэтому по большей части мне не нужно беспокоиться о переполнении стековой памяти. Хотя у меня все еще есть возможность полностью создать экземпляр объекта в куче.
Но скажем, я не знаю о реализации объектов. Допустим, я использую библиотеку, которая создает массивный массив в стеке. Это может потенциально вызвать проблемы.
Итак, мой вопрос: как мы узнаем, насколько «тяжелым» объектом является память?
Я собираюсь предположить, что нестандартные методы выделения стековой памяти вне таблицы (alloca
и друзья).
Учитывая это, все просто: возьмите sizeof
предмет.
C ++ является статически типизированным языком, но его объекты также являются статически размера. Каждый тип имеет размер, который должен быть определен во время компиляции. Многие C ++ опирается на это. Так что, если вы обеспокоены тем, что какой-то объект занимает слишком много места в стеке, это может быть только потому, что sizeof
объект занял это место.
Обратите внимание, что это не предотвратит проблемы, когда вы вызываете функцию, которая сам использует много места в стеке Вы ничего не можете сделать, чтобы обнаружить это. Но вы можете сказать, будет ли размер данного объекта «большим» или нет, по некоторому произвольному измерению.
Других решений пока нет …