Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> alloca - выделение дин. памяти на стеке, оффтоп из "[FAQ] Динамические массивы" 
:(
    Опции темы
Alexeis
Дата 3.1.2008, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



  ОК тогда есть еще добавление. Стандартная библиотека допускает создание динамических массивов в стеке. Очень быстрое выделение памяти, всего несколько команд.
Пример
Код

  byte* a = (byte*)alloca(20 * sizeof(byte));


Такие массивы не нужно удалять, так как они удаляются сами по выходу из функции.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
archimed7592
Дата 3.1.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alexeis @  3.1.2008,  17:13 Найти цитируемый пост)
ОК тогда есть еще добавление.

Нет такой ф-ции(ни в С, ни в C++).
Microsoft - это не язык smile.

Добавлено через 1 минуту и 30 секунд
Цитата(bsa @  3.1.2008,  17:14 Найти цитируемый пост)
This function is not in POSIX.1-2001.

Такой ф-ции просто по определению не может быть в POSIX'е, ибо управление стеком - это не API, это уже ближе к устройству компилятора.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alexeis
Дата 3.1.2008, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(archimed7592 @  3.1.2008,  16:18 Найти цитируемый пост)
Нет такой ф-ции(ни в С, ни в C++).
Microsoft - это не язык 

  Очень даже есть, причем это поддерживается не только мелкомягкими это справедливо для всей платформы win32 и для линукса (другое дело что его не было в старых версиях) и даже для мобильных платформ. Иногда она в malloc.h иногда в alloca.h.
  Удобная штука, ну не хотите как хотите  smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
archimed7592
Дата 3.1.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alexeis @  3.1.2008,  17:39 Найти цитируемый пост)
Очень даже есть

Видишь ли, когда идёт речь о наличии ф-ции в языке, то подразумевается её наличие в стандартной библиотеке, а стандартная библиотека - это та, что описана в стандарте языка(ISO/IEC, C: 9899, C++: 14882).


Цитата(Alexeis @  3.1.2008,  17:39 Найти цитируемый пост)
Удобная штука, ну не хотите как хотите  smile  

Да не то чтобы не хотим smile. Не стоит приучать новичков пользоваться нестандартными расширениями.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 3.1.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата

$ man alloca
No manual entry for alloca



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Alexeis
Дата 3.1.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(JackYF @  3.1.2008,  16:43 Найти цитируемый пост)
No manual entry for alloca

  Обычно она подставляется как макрос для еще большей эффективности, потому может и нет точки входа.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
archimed7592
Дата 3.1.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alexeis @  3.1.2008,  17:47 Найти цитируемый пост)
Обычно она подставляется как макрос для еще большей эффективности, потому может и нет точки входа. 

Давай ты сейчас скажешь, что ты пошутил, ладно? smile


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 3.1.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(archimed7592 @  3.1.2008,  17:48 Найти цитируемый пост)
Давай ты сейчас скажешь, что ты пошутил, ладно?

дваждую.

На другой машине ман нашёлся. Но это жестоко.
Итак, избранное:

Цитата

If  the  allocation causes stack overflow, program behaviour is undefined.

The  inlined  code often consists of a single instruction adjusting the stack pointer, and does not check for stack overflow.  Thus, there is no NULL error return.

The alloca() function is machine and compiler dependent. On many systems its implementation is buggy. Its use is discouraged.

On  many  systems  alloca()  cannot  be used inside the list of arguments of a function call, because the stack space reserved by alloca() would appear on the stack in the middle of the space  for  the  function arguments.

Ещё есть желающие пользоваться этой функцией? smile

Добавлено через 5 минут
Цитата(Fazil6 @  3.1.2008,  17:48 Найти цитируемый пост)
то четко разделить C и С++

это, имхо, можно обсудить, в виду различия подходов и реализации. На две разные статьи.

Цитата(Fazil6 @  3.1.2008,  17:48 Найти цитируемый пост)
так и не понял почему рассмотрение началось с функции realloc , а не calloc

согласен, можно бы поменять порядок

Цитата(Fazil6 @  3.1.2008,  17:48 Найти цитируемый пост)
malloc, calloc - выделение памяти

++. стоит упомянуть о различиях.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Alexeis
Дата 3.1.2008, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(archimed7592 @  3.1.2008,  16:48 Найти цитируемый пост)
Давай ты сейчас скажешь, что ты пошутил, ладно? 

  Да нет, я смотрел код ассемблера, ну пусть инлайн, не макрос, один фик.  

Цитата(JackYF @  3.1.2008,  16:53 Найти цитируемый пост)
Ещё есть желающие пользоваться этой функцией?

Канеш, оптимизировать так оптимизировать! 
  Можно при помощи него оптимизировать работу с строками. Строки в своем большинстве короткие, в куче выделяются медленно, если использовать строку фиксированного размера байтов эдак 200 то всегда есть шанс переполниться на 201 байте  smile , а если рекурсия то чего нам сэкономит память 20000 вызов по ~15 байт или 20000 вызов по килобайту (так чтобы с запасом)  smile ?

  Лан это все оффтоп конечно, но ИМХО функция рулез, хоть и опасная (разве С сам по себе безопасен?)


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
JackYF
Дата 3.1.2008, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Alexeis @  3.1.2008,  18:39 Найти цитируемый пост)
но ИМХО функция рулез

я извиняюсь... о! придумал! я сейчас создам опрос. Мне просто чисто интересно. Ждите на первом канале в общих вопросах smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 3.1.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alexeis @  3.1.2008,  18:39 Найти цитируемый пост)
Да нет, я смотрел код ассемблера, ну пусть инлайн, не макрос, один фик.  

Цитата(JackYF @  3.1.2008,  17:43 Найти цитируемый пост)
$ man alloca
No manual entry for alloca

Видишь ли, точка входа здесь не при чём smile.
Переводится как "нет справки для alloca", т.е. не все *nix системы знают об этой ф-ции smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1032 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.