|
Динамические переменные и массивы, Можно ли задать динамические массивы ? |
|
|
|
 |
Ответов
|
Sep 13 2013, 19:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(DASM @ Sep 13 2013, 20:07)  Не слишком . Это гораздо безопаснее всего остального. И мы коня в вакууме обсуждаем, все это без операционки можно.Знаете присказку, глупцы сложность игнорируют, умные с ней мирятся, а гении — устраняют.Или как то так. Хотите надежно — должно быть просто.
пс, успокойтесь про стек, есть просто заранее выделенные буфера.Это не маллок, это просто и тупо char buff (size) Это вы коня в вакууме обсуждаете. Какой-то театр абсурда. Причем здесь статические буферы? Я обсуждаю только одну тему: СОЗДАНИЕ ДИНАМИЧЕСКИХ МАССИВОВ ПЕРЕМЕННОЙ ДЛИНЫ НА СТЕКЕ ОПАСНАЯ ПРАКТИКА. Если вы полагаете, что вы можете меня чему-то научить, то могу вас заверить это очень маловероятно.
|
|
|
|
|
Sep 14 2013, 04:57
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Tarbal @ Sep 13 2013, 22:46)  СОЗДАНИЕ ДИНАМИЧЕСКИХ МАССИВОВ ПЕРЕМЕННОЙ ДЛИНЫ НА СТЕКЕ ОПАСНАЯ ПРАКТИКА. Variable length array служит для другого, а именно - для создания массива с классом памяти auto, размер которого зависит от значений, полученных во время выполнения. Это совсем не тот динамический массив, который подразумевается в этой дискуссии. Это просто красивое замещение alloca(). Что до фрагментации в куче - переход к дескрипторам со встроенным счетчиком ссылок приводит к такому набору Код typedef struct _descriptor_t { // dsc-table содержит список указателей на области памяти // при использовании кучи - таблица растет вверх от начала кучи, // выделяемые области памяти - вниз от конца uint_least16_t handle; uint_least16_t ref_count; } descriptor_t, *descriptor_p; #define DESCRIPTOR(name) descriptor_t name __attribute__((cleanup(force_free_dsc)) descriptor_t alloc_dsc(size_t sz); void *ref(descriptor_t dsc);// dsc.ref_count +=1; return dsc_table[dsc.handle]; void unref(descriptor_t dsc); // if(--dsc.ref_count == 0) free_dsc(&dsc);
void free_dsc(descriptor_p dsc); void force_free_dsc(descriptor_p dsc){dsc->ref_count = 0; free_dsc(dsc);} После чего оптимизация дыр в куче - делается на этапе освобождения памяти. Очевидно, что дополнительные накладные расходы не очень тяжелые, поскольку для доступа нужно один раз выделить auto указатель и выполнить ref() Auto дескриптор с cleanup атрибутом работает прекрасным уборщиком мусора, а статические дескрипторы не нуждаются в unref() Такие вот мысли... ps исправил неточности. Если чего пропустил, делайте замечания.
Сообщение отредактировал _Pasha - Sep 14 2013, 05:15
|
|
|
|
Сообщений в этой теме
Navovvol Динамические переменные и массивы Sep 2 2013, 07:51 demiurg_spb Цитата(Navovvol @ Sep 2 2013, 11:51) Буду... Sep 2 2013, 07:55 Tarbal Цитата(demiurg_spb @ Sep 2 2013, 11:55) +... Sep 11 2013, 17:04  demiurg_spb Цитата(Tarbal @ Sep 11 2013, 21:04) Для м... Sep 12 2013, 06:42   MrYuran Цитата(demiurg_spb @ Sep 12 2013, 09:42) ... Sep 12 2013, 07:00    demiurg_spb Цитата(MrYuran @ Sep 12 2013, 11:00) Созд... Sep 12 2013, 07:27     MrYuran Цитата(demiurg_spb @ Sep 12 2013, 10:27) ... Sep 12 2013, 07:52      demiurg_spb Цитата(MrYuran @ Sep 12 2013, 11:52) Знач... Sep 12 2013, 08:17   Tarbal Цитата(demiurg_spb @ Sep 12 2013, 10:42) ... Sep 12 2013, 12:43    demiurg_spb Цитата(Tarbal @ Sep 12 2013, 16:43) Засад... Sep 12 2013, 12:56     Tarbal Цитата(demiurg_spb @ Sep 12 2013, 16:56) ... Sep 12 2013, 15:07      demiurg_spb Спор бесполезен.
Вы не понимаете моей основной мыс... Sep 13 2013, 06:38       Tarbal Цитата(demiurg_spb @ Sep 13 2013, 10:38) ... Sep 13 2013, 12:29        demiurg_spb Цитата(Tarbal @ Sep 13 2013, 16:29) Попыт... Sep 13 2013, 12:40         Tarbal Цитата(demiurg_spb @ Sep 13 2013, 16:40) ... Sep 13 2013, 13:22          kolobok0 Цитата(Tarbal @ Sep 13 2013, 17:22) ..А в... Sep 13 2013, 14:51          demiurg_spb Цитата(Tarbal @ Sep 13 2013, 17:22) Скажи... Sep 13 2013, 15:03           Tarbal Цитата(demiurg_spb @ Sep 13 2013, 19:03) ... Sep 13 2013, 15:24 Bear_ku The operators new and delete are not implemented, ... Sep 2 2013, 08:05 Navovvol Спасибо. Если задуманное получиться, покажу, что ... Sep 2 2013, 08:51 DASM На самом деле в эмбеддед всякие alloc штука хороша... Sep 13 2013, 13:35 Tarbal Цитата(DASM @ Sep 13 2013, 17:35) На само... Sep 13 2013, 13:50 Tarbal Цитата(DASM @ Sep 13 2013, 17:35) На само... Sep 13 2013, 14:08 DASM Причем тут рекурсия вообще ? Данные принимаются в ... Sep 13 2013, 14:01 DASM Да не буду я ничего приводить, берете какие-то лев... Sep 13 2013, 14:28 Tarbal Цитата(DASM @ Sep 13 2013, 18:28) Да не б... Sep 13 2013, 14:48  DASM Цитата(Tarbal @ Sep 13 2013, 18:48) а во-... Sep 13 2013, 14:52   Tarbal Цитата(DASM @ Sep 13 2013, 18:52) "А... Sep 13 2013, 14:58 DASM Вобщем malloc использовать стал в микроконтролерах... Sep 13 2013, 15:42 Tarbal Цитата(DASM @ Sep 13 2013, 19:42) Вобщем ... Sep 13 2013, 15:58   DASM Цитата(_Pasha @ Sep 14 2013, 08:57) Очеви... Sep 14 2013, 06:50    _Pasha Цитата(DASM @ Sep 14 2013, 09:50) Один во... Sep 14 2013, 12:27 IgorKossak Tarbal, смотрите мой комментарий к Вашему предыдущ... Sep 13 2013, 16:09 DASM Динамические на стеке ? Это как ? Учить Вас и не д... Sep 14 2013, 04:33 Tarbal Цитата(DASM @ Sep 14 2013, 08:33) Динамич... Sep 15 2013, 23:52  demiurg_spb Цитата(Tarbal @ Sep 16 2013, 03:52) А вы ... Sep 30 2013, 07:13 Tarbal Куда ушли те времена, когда требовалось мастерство... Sep 14 2013, 13:49 _Pasha Кстати, понравившийся многим манагер кучи от Zltig... Sep 14 2013, 22:06
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|