Russian Qt Forum
Октябрь 01, 2024, 02:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3] 4   Вниз
  Печать  
Автор Тема: Строки в стеке или в куче ?  (Прочитано 26242 раз)
brankovic
Гость
« Ответ #30 : Март 10, 2011, 11:53 »

Прекрасная, удобная конструкция - но увы, эта радость только на gcc, на Вындоуз "так нельзя"  Плачущий

Оковы тяжкие падут,
Темницы рухнут — и свобода (в лице mingw)
Вас примет радостно у входа,
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #31 : Март 10, 2011, 11:57 »

...и сгенерит веселый код

типа такого:
Код:
 CPU Disasm
Address   Hex dump          Command                                          Comments
004012D0  /.  55            PUSH    EBP
004012D1  |.  8B0D 0CFF4400 MOV     ECX,DWORD PTR DS:[<&msvcrt._onexit>]
004012D7  |.  89E5          MOV     EBP,ESP
004012D9  |.  5D            POP     EBP
ну или
Код:
CPU Disasm
Address   Hex dump          Command                                          Comments
004013F1  |. /EB 01         JMP     SHORT 004013F4
004013F3  |  |90            NOP
004013F4  |> \55            PUSH    EBP
спасибо, не надо:)
Записан
kkk777kkk
Гость
« Ответ #32 : Март 10, 2011, 12:07 »

а не могли бы вы обьяснить ассемблерный код? в чем там минус?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #33 : Март 10, 2011, 12:21 »

псевдокод:
Код:
buf = a;
dosmth(); // 2я строка полезная
a = b; // че-то записали в а
a = buf; // и снова вернули как было до 1й строки

2й код ваще ноукомментс
Код:
goto label;
nop();
label: stack.pop(ebp); // нужна только эта
Записан
kkk777kkk
Гость
« Ответ #34 : Март 10, 2011, 12:52 »

обидно за любимый компиль Улыбающийся
но его же тоже люди писали Улыбающийся
Записан
brankovic
Гость
« Ответ #35 : Март 10, 2011, 13:01 »

обидно за любимый компиль Улыбающийся
но его же тоже люди писали Улыбающийся

Нет ни флагов компиляции, ни версии, ничего.. явная провокация Подмигивающий
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #36 : Март 10, 2011, 13:06 »

версия с к-ая шла с qt 4.7.0 кажется. Флаги деолтные при компиляции qt прогаммы. Не говорите мне про -O делать оптимизации за счет изначально кривого кода - это пять...
Записан
Etud
Гость
« Ответ #37 : Март 10, 2011, 13:29 »

Сделал через маленький буффер и байтовый массив.
Сетевой класс был сделан на WinSock2 (че фу сразу !).

Коротко:
Код
C++ (Qt)
char bufLoad[1024];
QByteArray bufHtml;
 
len = recv(mysocket, bufLoad, 1024, 0);
 
bufHtml.append(bufLoad);
 


Записан
Etud
Гость
« Ответ #38 : Март 10, 2011, 13:34 »

Код:
char buf [size];
Прекрасная, удобная конструкция - но увы, эта радость только на gcc, на Вындоуз "так нельзя"  Плачущий

Это для вектора касается или "нельзя" для Win ?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #39 : Март 10, 2011, 13:37 »

это по стандарту си/с++ нельзя, страшную тайну открою. ну гцц чхать на стандарты)) в msvc нельзя так писать
Записан
Etud
Гость
« Ответ #40 : Март 10, 2011, 13:43 »

А как раньше данные в буффер принимали ?

Код
C++ (Qt)
char bufLoad[1024];
 

И так нельзя ? А как тогда нужно Непонимающий Кошмариус !  Смеющийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #41 : Март 10, 2011, 13:45 »

переменную нельзя:) константу можно естессно. Типа должно быть известно на этапе компиляции сколько стека срезать.
причем кажется хак вида
Код:
const int i = func();
void *arr[i];

в мсвц работать таки будет, но я не уверен, давно это тестил.
Записан
twp
Гость
« Ответ #42 : Март 10, 2011, 13:56 »

для i мало const, она должна быть определена на этапе компиляции
Записан
Etud
Гость
« Ответ #43 : Март 10, 2011, 13:57 »

переменную нельзя:) константу можно естессно.

А разговор про переменную ?!! Тут уже мозг замылился.

По сабжу:

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

Гораздо лучше чем было. Спасибо всем !

Хотя может рано закрывать...
Записан
brankovic
Гость
« Ответ #44 : Март 10, 2011, 14:04 »

Не говорите мне про -O делать оптимизации за счет изначально кривого кода - это пять...

как дети, в самом деле. Задание компилятору: надо сгенерить код, оптимизировать не надо, но чтобы хоть чуть-чуть причесать, а то Авварон будет недоволен..

Код:
const int i = func();
void *arr[i];

такое же нарушения стандарта.

2Etud: можно объявлять массив, если в скобках выражение известное на этапе компиляции, например 1024 или 10 * sizeof (int) и т.п.
Записан
Страниц: 1 2 [3] 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.085 секунд. Запросов: 23.