Можно ли объявлять большие объекты структуры в статической глобальной области? - PullRequest
3 голосов
/ 26 апреля 2019

Я думаю о создании глобальной статической структуры, например так:

typedef struct {
    Thing things[1024];
} MyBigStruct;

static MyBigStruct s;

Есть ли причина, по памяти или по другой причине, почему бы не помещать большие объекты структуры в "static-globals?площадь"?Есть ли предел этой области?Должен ли я объявить это с malloc в куче?

Пожалуйста, обратитесь не к методам кодирования глобальных переменных, а только к техническому аспекту.

Ответы [ 2 ]

3 голосов
/ 26 апреля 2019

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

В зависимости от того, насколько велики эти переменные, вы 'Вероятно, вы получите небольшой выигрыш во время выполнения по сравнению с динамическим распределением, так как пространство для этой переменной выделяется при запуске программы, а не во время выполнения для выделения этой памяти из кучи.

2 голосов
/ 26 апреля 2019

Есть ли причина, по памяти или по другой причине, почему бы не поместить большую структуру объекты в «области static-globals»?

Нет . Прекрасно использовать глобалы так, как вы описали, и даже выгодно в некоторых отношениях. (например, с точки зрения скорости выполнения по динамическому распределению.
Однако , хотя и не связан размер , есть и другие недостатки в использовании глобальных переменных. Например, глобальные переменные могут создавать проблемы при использовании нескольких потоков. Любая функция в вашем коде, которая обращается к глобалу, больше не является реентерабельным , одним из принципов поточно-ориентированной функции. Если многопоточность включена в ваше приложение, то дополнительные меры предосторожности необходимы для совместного использования глобальных объектов между потоками.

Есть ли предел этой области? Должен ли я объявить это с помощью malloc в куча? _

Раздел данных памяти [предназначен] для глобальных и статических данных ... , предполагая, что его размер ограничен только объемом физической памяти, доступной в вашей системе. ( Более подробное обсуждение ограничений физической памяти можно найти здесь. )

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