0

Статические глобальные переменные в C++

11

Я хотел бы создать массив целых чисел с помощью метода malloc. Я хочу, чтобы этот массив был глобальным и использовался в любом месте моей программы. Я поместил код в заголовочный файл, который выглядел так:

static int *pieces;

Затем я создал функцию, которая заполняет массив нужными мне числами. Эта функция находится в пространстве имен и реализована в собственном .cpp файле. Однако я импортирую заголовочный файл в main.c и вызываю функцию из пространства имен, которая создает массив следующим образом:

pieces = malloc(sizeof(int) * 128);

Но когда я пытаюсь получить доступ к числам в массиве из main (после того как вызвал функцию, создающую массив), программа выдает ошибку и сообщает, что pieces не инициализирован. Однако внутри функции я могу создать массив и манипулировать числами в нем без проблем. Я был под впечатлением, что, сделав pieces статической переменной, любое изменение (или присваивание) этой переменной в любой функции повлияет на ее использование везде. В основном, что я пытаюсь сказать: почему pieces кажется неинициализированным в main, хотя я установил его в функции, которую вызвал?

1 ответ(ов)

0

Для достижения высокой производительности кода на различных архитектурах, вам может понадобиться задание памяти с помощью функции malloc вместо стандартного оператора new. Это объясняется тем, что вы сможете обернуть его в что-то вроде mymalloc() и использовать зависимые от архитектуры функции, которые обеспечивают правильное выравнивание, предотвращающее кэш-промахи, и выполняют другие полезные задачи, предоставляемые производителем оборудования, такими как IBM (Bluegene) или Intel (MIC). Все эти оптимизированные процедуры выделения памяти основаны на концепции, аналогичной malloc.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь