Глобальные структуры расположены в стеке или в куче? - PullRequest
5 голосов
/ 20 сентября 2011

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

Является ли глобальная / локальная структура, выделенная настек или куча?Например:

Если этот оператор находится в глобальной области действия

struct symbol {
    char blockID;
    int blockNum;
    int ivalue;  
    double fvalue;
    int reference;
    bool isFloat, isInt, isRef;
    int symbolLength;
} mySymbol;

, где выделена память для него?

Ответы [ 2 ]

8 голосов
/ 20 сентября 2011

В C ++, в отличие от C #, struct мало чем отличается от class.struct - это class, видимость которого по умолчанию общедоступна.Будет ли выделение выполнено в стеке или в куче, зависит от способа выделения вашего экземпляра

class A;

void f()
{
 A a;//stack allocated
 A *a1 = new A();// heap
}
8 голосов
/ 20 сентября 2011

Это определяется реализацией (стандарт C ++ на самом деле не говорит о стеке и куче).

Как правило, объекты со статической продолжительностью хранения (например, глобальные переменные) оказываются в специальном сегменте адресного пространства, который не является ни стеком, ни кучей. Но специфика варьируется от платформы к платформе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...