Статические глобальные переменные в C++
Я хотел бы создать массив целых чисел с помощью метода malloc
. Я хочу, чтобы этот массив был глобальным и использовался в любом месте моей программы. Я поместил код в заголовочный файл, который выглядел так:
static int *pieces;
Затем я создал функцию, которая заполняет массив нужными мне числами. Эта функция находится в пространстве имен и реализована в собственном .cpp файле. Однако я импортирую заголовочный файл в main.c
и вызываю функцию из пространства имен, которая создает массив следующим образом:
pieces = malloc(sizeof(int) * 128);
Но когда я пытаюсь получить доступ к числам в массиве из main
(после того как вызвал функцию, создающую массив), программа выдает ошибку и сообщает, что pieces
не инициализирован. Однако внутри функции я могу создать массив и манипулировать числами в нем без проблем. Я был под впечатлением, что, сделав pieces
статической переменной, любое изменение (или присваивание) этой переменной в любой функции повлияет на ее использование везде. В основном, что я пытаюсь сказать: почему pieces
кажется неинициализированным в main
, хотя я установил его в функции, которую вызвал?
1 ответ(ов)
Для достижения высокой производительности кода на различных архитектурах, вам может понадобиться задание памяти с помощью функции malloc вместо стандартного оператора new. Это объясняется тем, что вы сможете обернуть его в что-то вроде mymalloc() и использовать зависимые от архитектуры функции, которые обеспечивают правильное выравнивание, предотвращающее кэш-промахи, и выполняют другие полезные задачи, предоставляемые производителем оборудования, такими как IBM (Bluegene) или Intel (MIC). Все эти оптимизированные процедуры выделения памяти основаны на концепции, аналогичной malloc.
Сравнение регулярного приведения типов, static_cast и dynamic_cast
Разница между const int*, const int * const и int * const?
Возможно ли вывести тип переменной в стандартном C++?
Определение typedef для указателя на функцию?
Что такое ** в C++?