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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Можно ли "заморозить" слот/сигнал?  (Прочитано 18428 раз)
Bepec
Гость
« Ответ #15 : Сентябрь 21, 2012, 12:34 »

Аваррон вы немного путаете Улыбающийся

Я говорю о том, что сигналы медленные по сравнению с прямыми вызовами Улыбающийся

Вы же сравниваете сигнал и вызов слота с последующей обработкой данных модели, что в корне неверно Улыбающийся

PS если дальше пойдёт, то начнёте сравнивать скорость работы класса с его конструктором Веселый

PPS реаллок - наверно освобождение памяти Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #16 : Сентябрь 21, 2012, 13:06 »

реалок - перераспределение памяти.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Akon
Гость
« Ответ #17 : Сентябрь 21, 2012, 13:30 »

Верес:
Да потрудитесь проанализировать предыдущие посты, особенно ваши, может поймете, кто путается.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #18 : Сентябрь 21, 2012, 13:54 »

Аваррон вы немного путаете Улыбающийся

Я говорю о том, что сигналы медленные по сравнению с прямыми вызовами Улыбающийся

Вы же сравниваете сигнал и вызов слота с последующей обработкой данных модели, что в корне неверно Улыбающийся

PS если дальше пойдёт, то начнёте сравнивать скорость работы класса с его конструктором Веселый

PPS реаллок - наверно освобождение памяти Улыбающийся

Понятно, что прямые вызовы будут быстрее, чем сигнал\слот. Но зачем экономить на спичках, если есть гораздо более проблемные вещи?

Igors
реаллок - это сишная функция realloc(). Странно, что вы не знаете:)
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #19 : Сентябрь 21, 2012, 14:21 »

Igors
реаллок - это сишная функция realloc(). Странно, что вы не знаете:)
Эту знаю, то Ваша транскрипция/прононс меня сбили с толку Улыбающийся В свое время намучался с ней
Код
C++ (Qt)
void * data = malloc(1024 * 1024 * 100); // выделили 100 Mb
data = realloc(data, 1024);  
 
Блок 1K корректен, но по крайней мере "на некоторых платформах" 100Mb остаются занятыми. Писал Qt об этом, поблагодарили (наверное пофиксили).

По поводу больших данных. На добавление очень хороша дека (только не в MSVC реализации). На удаление она тоже заметно быстрее. На вставку простых решений не знаю, надо выдумывать (что впрочем мне нравится)
« Последнее редактирование: Сентябрь 21, 2012, 14:23 от Igors » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #20 : Сентябрь 21, 2012, 15:34 »

Igors
реаллок - это сишная функция realloc(). Странно, что вы не знаете:)
Эту знаю, то Ваша транскрипция/прононс меня сбили с толку Улыбающийся В свое время намучался с ней
Код
C++ (Qt)
void * data = malloc(1024 * 1024 * 100); // выделили 100 Mb
data = realloc(data, 1024);  
 
Блок 1K корректен, но по крайней мере "на некоторых платформах" 100Mb остаются занятыми. Писал Qt об этом, поблагодарили (наверное пофиксили).

По поводу больших данных. На добавление очень хороша дека (только не в MSVC реализации). На удаление она тоже заметно быстрее. На вставку простых решений не знаю, надо выдумывать (что впрочем мне нравится)

Какая связь между сишными функциями и Qt??

Ну собственно самописная дека легко расширяется для вставки в середину. С появлением чанков уменьшаются накладные расходы на меммув при вставке в середину.
Записан
Sancho_s_rancho
Гость
« Ответ #21 : Сентябрь 21, 2012, 15:48 »

Igors
реаллок - это сишная функция realloc(). Странно, что вы не знаете:)
Эту знаю, то Ваша транскрипция/прононс меня сбили с толку Улыбающийся В свое время намучался с ней
Код
C++ (Qt)
void * data = malloc(1024 * 1024 * 100); // выделили 100 Mb
data = realloc(data, 1024);  
 
Блок 1K корректен, но по крайней мере "на некоторых платформах" 100Mb остаются занятыми. Писал Qt об этом, поблагодарили (наверное пофиксили).

По поводу больших данных. На добавление очень хороша дека (только не в MSVC реализации). На удаление она тоже заметно быстрее. На вставку простых решений не знаю, надо выдумывать (что впрочем мне нравится)

Какая связь между сишными функциями и Qt??

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

Qt-шники фиксят реализации плюсовых компиляторов и поведение ОС  Шокированный
Пятница закончилась хорошим настроением. Спасибо.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Сентябрь 21, 2012, 18:40 »

Какая связь между сишными функциями и Qt??
Довольно прямая. Попробуйте такой тестик на OSX 10.6.8.
Код
C++ (Qt)
#include <QVector>
 
int main ()
{
const int count = 100 * (1024 * 1024);
 
QVector <int> test;
test.resize(count);
 
printf("after resize, press enter\n");
getchar();
 
test.erase(test.begin(), test.begin() + count - 4);
 
test.squeeze();
 
printf("after squeeze, press enter\n");
getchar();
 
test.clear();
 
printf("after clear, press enter\n");
getchar();
 
return 0;
}
 
Обратите внимание что дока по squeeze обещает освободить память, однако на 10.6.8 этого не происходит, Activity Monitor по-прежнему показывает 400 Mb занято

Ну собственно самописная дека легко расширяется для вставки в середину.
Это интересно, прошу показать как. Хотя обычно если говорится "легко" - шансов увидеть маловато  Улыбающийся
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #23 : Сентябрь 21, 2012, 18:47 »

Обратите внимание что дока по squeeze обещает освободить память, однако на 10.6.8 этого не происходит, Activity Monitor по-прежнему показывает 400 Mb занято
Память-то squeeze освобождает, только вот не отдаёт системе)
Всё зависит от реализации malloc-a.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #24 : Сентябрь 21, 2012, 19:08 »

Память-то squeeze освобождает, только вот не отдаёт системе)
Всё зависит от реализации malloc-a.
Если напр в 32-бит я так буду "освобождать" - очень быстро получу отказ выделения. А в 64 пойдет по свапам что еще хуже. С malloc везде все хорошо, ни разу не видел его вины. А вот использования проблемной ф-ции realloc лучше избегать, это несложно
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #25 : Сентябрь 21, 2012, 19:27 »

Функция realloc не проблемная. Менеджеры памяти всегда отъедают память для кучи у системы и не всегда у них получается ее освободить. Посудите сами, к примеру, выделили вы 100Мб, а затем 100б, теперь вы 100Мб ужимаете до 1 килобайта, и получается дырка вочти в 100 Мб между двумя выделениями. Менеджер памяти не может при этом отдать эту память системе. Отдаст системе только когда вы освободите те последние 100 б. Но при этом память для приложения освободилась и менеджер памяти может переиспользовать ее для новых выделений.
Записан

Гугль в помощь
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #26 : Сентябрь 21, 2012, 19:59 »

Но при этом память для приложения освободилась и менеджер памяти может переиспользовать ее для новых выделений.
Это легко проверить. Изменим примерчик
Код
C++ (Qt)
#include <QtGUI>
 
int main ()
{
const int count = 100 * (1024 * 1024);
 
for (int i = 0; i < 100; ++i) {
QVector <int> * test = new QVector <int> ();
test->resize(count);
test->erase(test->begin(), test->begin() + count - 4);
test->squeeze();
 
printf("after squeeze, press enter\n");
getchar();
}
 
return 0;
}
 
На OSX 10.6.8 увидим последовательное пожирание памяти 400, 800 и.т.д. Когда (в 32-битах) граница 2Gb будет перейдена - получим столь любимое Вами exception  Улыбающийся
Записан
Bepec
Гость
« Ответ #27 : Сентябрь 21, 2012, 21:07 »

Эммм igors а где realloc? Улыбающийся

Вы в примере тупо выделяете память Улыбающийся Конечно она убьётся в эксепшн.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #28 : Сентябрь 21, 2012, 21:27 »

С malloc везде все хорошо, ни разу не видел его вины. А вот использования проблемной ф-ции realloc лучше избегать, это несложно
Не надо разделять malloc/realloc ибо они всегда являются частью одного менеджера памяти.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #29 : Сентябрь 21, 2012, 21:45 »

Эммм igors а где realloc? Улыбающийся

Вы в примере тупо выделяете память Улыбающийся Конечно она убьётся в эксепшн.
У кого убьется, а у кого и как сказать. Речь здесь о том что не везде realloc отдает память взад. В результате squeeze не работает как положено (см. обсуждение выше).

Не надо разделять malloc/realloc ибо они всегда являются частью одного менеджера памяти.
Я вполне согласен с этим глубокомысленным утверждением, но не пойму как оно меняет практический результат Улыбающийся. Это не только для QVector,  на и для др, напр QString, и разделяем мы там чего или нет - мне придется с этим считаться напр при работе с большими файлами
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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