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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как часто вы пользуетесь функцией 'alloca'? 
:(
    Опции темы
 
Пользуетесь ли вы функцией 'alloca'?
эта функция мне не нужна, всегда обходился без неё [ 23 ]  [63.89%]
не буду никогда ей пользоваться, слишком опасная [ 5 ]  [13.89%]
не пользовался, но хочу попробовать [ 1 ]  [2.78%]
пользовался один-два раза [ 3 ]  [8.33%]
с успехом применяю в своих проектах [ 3 ]  [8.33%]
даже не представляю, что бы я делал без этой функции... [ 1 ]  [2.78%]
Всего проголосовавших: 36
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
JackYF
Дата 3.1.2008, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Ответа "что это такое?" нет, потому как описание функции можно просмотреть здесь.

И не забываем отписываться, кто какой вариант выбрал smile

Это сообщение отредактировал(а) JackYF - 3.1.2008, 19:59


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


Амеба
Group Icon


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

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



  Хорошо бы еще сузить вопрос до языка С, потому как многие успешно используют оператор new, вместо всяких malloc ов и т.д.


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

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

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


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


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

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



Цитата(Alexeis @  3.1.2008,  19:53 Найти цитируемый пост)
Хорошо бы еще сузить вопрос до языка С

Не согласен. Функцию alloca можно использовать и в программе на С++, поэтому пофиг.

Добавлено через 17 секунд
Цитата(Alexeis @  3.1.2008,  19:53 Найти цитируемый пост)
потому как многие успешно используют оператор new, вместо всяких malloc ов и т.д.

правильно, но это к теме опроса не относится smile


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


Амеба
Group Icon


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

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



Цитата(JackYF @  3.1.2008,  18:58 Найти цитируемый пост)
Функцию alloca можно использовать и в программе на С++, поэтому пофиг.

  Можно и ассемблерные вставки в С++е делать, но этим мало кто пользуется  smile .


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

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

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


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



эм. фиговина какая. не использовал и не собираюсь. я уж лучше напишу char buf[100]... smile
PM MAIL   Вверх
JackYF
Дата 3.1.2008, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(dumb @  3.1.2008,  20:10 Найти цитируемый пост)
я уж лучше напишу char buf[100]...

ага. А в gcc вообще можно написать
Код

int i;
i = 100;
char buf[i];

... и тоже работает  smile 

З.Ы. сам я так не делаю, некозырно smile


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


Архимед
****


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

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



Цитата(JackYF @  3.1.2008,  19:42 Найти цитируемый пост)
И не забываем отписываться, кто какой вариант выбрал 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   Вверх
MAKCim
Дата 3.1.2008, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



вариант 1


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
archimed7592
Дата 3.1.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(JackYF @  3.1.2008,  20:27 Найти цитируемый пост)
А в gcc вообще можно написать

В С99, если быть точнее.


--------------------
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   Вверх
nickless
Дата 3.1.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(dumb @  3.1.2008,  18:10 Найти цитируемый пост)
эм. фиговина какая. не использовал и не собираюсь.

 smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
JackYF
Дата 3.1.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Кто второй успешно пользует функцию в своих проектах?


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


ПРОФЕССИОНАЛ



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 3.1.2008

Репутация: -2
Всего: -9



Цитата(JackYF @ 3.1.2008,  23:03)
Кто второй успешно пользует функцию в своих проектах?

Йа, а что? smile 

PM MAIL   Вверх
Любитель
Дата 3.1.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Впервый раз услышал )))


--------------------
PM MAIL ICQ Skype   Вверх
H5N1
  Дата 3.1.2008, 23:32 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


ПРОФЕССИОНАЛ



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 3.1.2008

Репутация: -2
Всего: -9



Любитель, наверное ты пользуешся 
Код

buf[100] 
 или оператором new 


PM MAIL   Вверх
archimed7592
Дата 3.1.2008, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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




 ! 
archimed7592
H5N1, нам всегда интересно пообщаться с настоящими профессионалами, но если ты не перестанешь оффтопить, то, к великому сожалению, тебе придётся пару дней отдохнуть от форума(а форуму от тебя).



--------------------
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
Дата 4.1.2008, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



а, понятно.

Цитата(archimed7592 @  3.1.2008,  23:42 Найти цитируемый пост)
нам всегда интересно пообщаться с настоящими профессионалами, но если ты не перестанешь оффтопить, то, к великому сожалению, тебе придётся пару дней отдохнуть от форума(а форуму от тебя).

+много smile


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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Не использую, вероятно и не буду.
Функция может понадобиться, когда статические способы непригодны (размер заранее неизвестен)
Код

void f (size_t n)
{
  // хочется X buf[n];
  X *ptr = alloca(n*sizeof(X));
}

но это смахивает на преждевременную оптимизацию. А реальных случаев, когда такая оптимизация полезна, как-то не случилось...


Это сообщение отредактировал(а) baldina - 4.1.2008, 19:18
PM MAIL   Вверх
Alexeis
Дата 4.1.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(baldina @  4.1.2008,  18:14 Найти цитируемый пост)
А реальных случаев, когда такая оптимизация полезна, как-то не случилось...

  Сишные строки. Сколько символов должна быть временная строка? Или строка загружаемая из ресурсов? 10? 100? 1кб? А вдруг понадобиться загрузить фрагмент текстового файла?


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

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

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(Alexeis @  4.1.2008,  18:47 Найти цитируемый пост)
А вдруг понадобиться загрузить фрагмент текстового файла?

а вдруг не понадобится?

Цитата

 не оптимизируйте никогда! 

(с) Г.Саттер

PM MAIL   Вверх
baldina
Дата 4.1.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Alexeis, причем тут оптимизация?
PM MAIL   Вверх
Alexeis
Дата 4.1.2008, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(baldina @  4.1.2008,  19:33 Найти цитируемый пост)
Alexeis, причем тут оптимизация? 

  При том что такая память мгновенно выделяется и освобождается smile . А куча работает медленно. Кто не верит можете устроить тест.


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

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

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


Архимед
****


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

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



Цитата(baldina @  4.1.2008,  20:33 Найти цитируемый пост)
Alexeis, причем тут оптимизация? 

Сабжевая ф-ция невероятно быстра smile.

Добавлено через 1 минуту и 27 секунд
Цитата(Alexeis @  4.1.2008,  20:36 Найти цитируемый пост)
Кто не верит можете устроить тест. 

Да верим, верим, только, если понадобится дин. память с возможностью быстрого выделения/освобождения, то я предпочту использовать рукописный пул, чем это безобразие 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   Вверх
bsa
Дата 4.1.2008, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Тогда уж лучше pool'ы устроить в куче.
PM   Вверх
baldina
Дата 4.1.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Вы все правы, ребята. Однако повторю: "причем тут оптимизация". Речь шла о том, что мне такая оптимизация ни разу не понадобилась. Кому-то - возможно. Но оптимизировать заранее, причем нестандартным способом - увольте. Есть у меня где в похожих местах используется auto_ptr, инициализируемый результатом new. Это понятно и переносимо. Будет узким местом - будем оптимизировать. Но не раньше.

Добавлено через 1 минуту и 12 секунд
Иногда у меня ощущение, что народ полностью ветку не читает, только вокруг...
PM MAIL   Вверх
archimed7592
Дата 4.1.2008, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



baldina, пессемизировать преждевременно тоже не стоит - ты же не пользуешься строками, чтобы хранить отдельные символы? Так и тут - была бы эта ф-ция стандартна и безопасна, то её можно было бы использовать там, где это уместно.

Это сообщение отредактировал(а) archimed7592 - 4.1.2008, 20:55


--------------------
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   Вверх
warmonger_
Дата 7.1.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.7.2007
Где: г. Киев

Репутация: 1
Всего: 3



правильно ли я понимаю, что alloc действует подобно auto_ptr? 
В том смысле, что освобождается память.

--------------------
Make everything as simple as possible, but not simpler.Albert Einstein
PM MAIL   Вверх
bsa
Дата 7.1.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



warmonger_, alloca выделяет память в области стека. т.е. при выходе из функции память освобождается. Но в отличие от auto_ptr деструктор не вызывается (это сишная функция, тем более нестандартная).
PM   Вверх
Mayk
Дата 7.1.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

Репутация: 45
Всего: 134



по-моему когда я её трогал в последний раз она у меня как стек завалила нафиг.
с тех пор фобия.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
GrayCardinal
Дата 7.1.2008, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


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

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



Никогда не юзал и юзать не собираюсь. ИМХО, изврат какой-то право слово...


--------------------
PM MAIL WWW   Вверх
archimed7592
Дата 7.1.2008, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Ну почему же? IMHO, совсем не изврат. Просто если бы она проверяла сколько в стеке места осталось и при необходимости автоматом увеличивала бы стек(если это возможно), то был бы неплохой способ создавать динамические объекты 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   Вверх
UnrealMan
Дата 7.1.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(archimed7592 @  7.1.2008,  18:33 Найти цитируемый пост)
Просто если бы она проверяла сколько в стеке места осталось и при необходимости автоматом увеличивала бы стек

Тут ещё надо учитывать такую вещь. Самой alloca стека может хватить, а вот тем функциям, которые будут дальше вызываться, может ничего не достаться smile Был бы не плох другой вариант: если после резервирования посредством alloca стековой памяти полстека остаётся свободным, то производить резервирование стековой памяти, в противном случае резервировать память не в стеке, а в куче.
PM MAIL   Вверх
Mayk
Дата 8.1.2008, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

Репутация: 45
Всего: 134



Цитата(UnrealMan @  8.1.2008,  00:05 Найти цитируемый пост)
Был бы не плох другой вариант: если после резервирования посредством alloca стековой памяти полстека остаётся свободным, то производить резервирование стековой памяти, в противном случае резервировать память не в стеке, а в куче. 

но тут же возникаеь вопрос --- а кто будет уничтожать память в куче? 




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
JackYF
Дата 8.1.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Mayk @  8.1.2008,  07:57 Найти цитируемый пост)
но тут же возникаеь вопрос --- а кто будет уничтожать память в куче? 

+1.

"Доктор сказал - в топку, значит в топку!" smile, имхо.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Mayk @  8.1.2008,  08:57 Найти цитируемый пост)
а кто будет уничтожать память в куче? 

Компилятор - при выходе из функции.
PM MAIL   Вверх
JackYF
Дата 8.1.2008, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(UnrealMan @  8.1.2008,  18:18 Найти цитируемый пост)
при выходе из функции. 

то есть типа такая стековая куча?..
gcc/g++ в этом плане молодцы - у них в размер массива можно пихать переменную, а не константу - раз всё равно нестандартно, и работает понятно smile


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


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(JackYF @  8.1.2008,  20:36 Найти цитируемый пост)
gcc/g++ в этом плане молодцы - у них в размер массива можно пихать переменную, а не константу - раз всё равно нестандартно, и работает понятно 

уже тут говорилось, что GCC тут не причем
это не его расширение, а стандарт С99
 smile 
не понятно, зачем было вводить ограничение константности размера массивов
реализация же тут проста как 5 копеек


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
JackYF
Дата 8.1.2008, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(MAKCim @  8.1.2008,  20:55 Найти цитируемый пост)
что GCC тут не причем
это не его расширение, а стандарт С99

тю, ёлки, я всё забываю, пардон  smile 


Цитата(MAKCim @  8.1.2008,  20:55 Найти цитируемый пост)
а стандарт С99

кстати, а кто-то, кроме gcc, его поддерживает?

Цитата(MAKCim @  8.1.2008,  20:55 Найти цитируемый пост)
зачем было вводить ограничение константности размера массивов
реализация же тут проста как 5 копеек

ну... вроде бы да, но нет ли подводных камней?...


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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(MAKCim @ 8.1.2008,  21:55)
не понятно, зачем было вводить ограничение константности размера массивов
реализация же тут проста как 5 копеек

Ну я бы не сказал, что проста - размещение переменных в стеке необходимо определять во время исполнения (особенно, если есть два таких массива). Хотя проверил, действительно работает (честное слово не знал, что так можно). Но ассемблерный код мне не понравился - огромная куча страшных инструкций в месте определения массива. smile 
Код
    mov    -0x1c(%rbp),%eax ;первый массив int x[n]
    cltq   
    shl    $0x2,%rax
    add    $0xf,%rax
    add    $0xf,%rax
    shr    $0x4,%rax
    shl    $0x4,%rax
    sub    %rax,%rsp
    mov    %rsp,-0x38(%rbp)
    mov    -0x38(%rbp),%rax
    add    $0xf,%rax
    shr    $0x4,%rax
    shl    $0x4,%rax
    mov    %rax,-0x38(%rbp)
    mov    -0x38(%rbp),%rax
    mov    %rax,-0x18(%rbp)

    mov    -0x1c(%rbp),%eax      ;второй массив int y[n*2]
    add    %eax,%eax
    cltq   
    shl    $0x2,%rax
    add    $0xf,%rax
    add    $0xf,%rax
    shr    $0x4,%rax
    shl    $0x4,%rax
    sub    %rax,%rsp
    mov    %rsp,-0x30(%rbp)
    mov    -0x30(%rbp),%rax
    add    $0xf,%rax
    shr    $0x4,%rax
    shl    $0x4,%rax
    mov    %rax,-0x30(%rbp)
    mov    -0x30(%rbp),%rax
    mov    %rax,-0x10(%rbp)
Правда если включить оптимизацию (-O3), то получится:
Код
   mov    -0xc(%rbp),%ecx
   movslq %ecx,%rax
   lea    0x1e(,%rax,4),%rax
   and    $0xfffffffffffffff0,%rax
   sub    %rax,%rsp
   lea    (%rcx,%rcx,1),%eax
   lea    0xf(%rsp),%rdx
   cltq   
   lea    0x1e(,%rax,4),%rax
   and    $0xfffffffffffffff0,%rdx
   and    $0xfffffffffffffff0,%rax
   sub    %rax,%rsp
   lea    0xf(%rsp),%rsi
   and    $0xfffffffffffffff0,%rsi


Это сообщение отредактировал(а) bsa - 8.1.2008, 22:48
PM   Вверх
Alexeis
Дата 8.1.2008, 22:49 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(bsa @  8.1.2008,  21:41 Найти цитируемый пост)
Но ассемблерный код мне не понравился - огромная куча страшных инструкций в месте определения массива.

  Хех разве это куча? Это считай мгновенно.


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

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

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


Архимед
****


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

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



Цитата(bsa @  8.1.2008,  22:41 Найти цитируемый пост)
    add    $0xf,%rax
    add    $0xf,%rax

Это релиз? 0_о

Добавлено через 1 минуту и 2 секунды
Наконец-то начал видеть знакомые аватарки 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   Вверх
bsa
Дата 8.1.2008, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(archimed7592 @ 8.1.2008,  22:58)
Цитата(bsa @  8.1.2008,  22:41 Найти цитируемый пост)
    add    $0xf,%rax
    add    $0xf,%rax

Это релиз? 0_о

Это gcc -O0 -ggdb
PM   Вверх
MAKCim
Дата 8.1.2008, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(bsa @  8.1.2008,  22:41 Найти цитируемый пост)
Ну я бы не сказал, что проста - размещение переменных в стеке необходимо определять во время исполнения

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

Добавлено через 1 минуту и 16 секунд
Цитата(bsa @  8.1.2008,  22:41 Найти цитируемый пост)
Но ассемблерный код мне не понравился - огромная куча страшных инструкций в месте определения массива

пройтись по коду с -O3 и все будет OK


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bsa
Дата 8.1.2008, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Я что-то не понял, я же показал код с включенной оптимизацией. Он еще менее понятен, но зато гораздо меньше.
PM   Вверх
CppDevelopeR
Дата 8.1.2008, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



Цитата(bsa @  8.1.2008,  23:09 Найти цитируемый пост)
Я что-то не понял, я же показал код с включенной оптимизацией. Он еще менее понятен, но зато гораздо меньше. 


Не могу не согласиться


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 8.1.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(bsa @  8.1.2008,  23:09 Найти цитируемый пост)
Он еще менее понятен, но зато гораздо меньше. 

ну да
я чего-то его пропустил  smile 
Код

   mov    -0xc(%rbp),%ecx  /* берем n */
   movslq %ecx,%rax /* знаково расширяем до 64-х бит */
   lea    0x1e(,%rax,4),%rax /* 30 + n << 2 */
   and    $0xfffffffffffffff0,%rax /* выравниваем итоговое количество байт под массив по 16-ти байтной границе */
   sub    %rax,%rsp /* выделяем память под массив */
   lea    (%rcx,%rcx,1),%eax /* n << 1 */
   lea    0xf(%rsp),%rdx /* почти итоговый адрес первого массива */
   cltq   /* расширяем до 64-х бит значение n << 1 */
   lea    0x1e(,%rax,4),%rax /* 30 + (n << 1) << 2 */
   and    $0xfffffffffffffff0,%rdx /* итоговый адрес первого массива */
   and    $0xfffffffffffffff0,%rax /* выравниваем итоговое количество байт под второй массив по 16-ти байтной границе */
   sub    %rax,%rsp /* выделяем память под второй массив */
   lea    0xf(%rsp),%rsi /* почти итоговый адрес второго массива */
   and    $0xfffffffffffffff0,%rsi /* итоговый адрес второго массива */



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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