Лучшая практика для выделения памяти для примитивных типов в target-c - PullRequest
1 голос
/ 11 сентября 2011

Какова лучшая практика для выделения памяти для примитивных типов в target-c?

Используется ли выделение C в порядке (malloc и free)

unsigned int* val = malloc(sizeof(unsigned int));
free(val);

Или существует какой-либо объект?-c конкретные распределения?

И что лучше, если функция ожидает указатель на int, самостоятельно создает и управляет указателем, или просто создает обычную переменную и отправляет ее адрес с помощью оператора address-of:

Первая форма:

NSScanner* scanner = [NSScanner scannerWithString: @"F"];
unsigned int* val = malloc(sizeof(unsigned int));
[scanner scanHexInt: val];
NSLog(@"%d", *val);
free(val);

Вторая форма:

NSScanner* scanner = [NSScanner scannerWithString: @"F"];
unsigned int  val;
[scanner scanHexInt: &val];
NSLog(@"%d", val);

С помощью второй формы я освобождаюсь от головной боли, связанной с выделением памяти.

1 Ответ

3 голосов
/ 11 сентября 2011

Обе формы действительны и имеют свои плюсы и минусы, но первая - это дополнительная работа в этом примере и имеет негативные последствия для производительности по сравнению со второй формой.

В первой форме вы будете размещать int в куче, поэтому подсистеме malloc придется вести учет, чтобы убедиться, что выделение доступно. Вам также придется запомнить , чтобы освободить распределение в нужное время.

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

Ключевое время для использования malloc / free - это если вы хотите, чтобы область действия вашей переменной продолжалась вне текущей функции. В противном случае, когда вы выйдете из функции, стек будет вытолкнут, и вы потеряете данные.

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