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

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

Страниц: 1 [2] 3 4 ... 7   Вниз
  Печать  
Автор Тема: QSqlQuery+QThread = bad_alloc  (Прочитано 43521 раз)
OKTA
Гость
« Ответ #15 : Май 16, 2014, 14:32 »

Ну так я и не призываю выделять под свои программы 10 мегабайт и ни байта больше  Смеющийся
Я говорю о том, что пользоваться тем надо, что может дать операционная система, на которой работает программа, а не планки, установленные в машину) И то по-возможности стараться минимизировать) Динамическая работа с памятью - залог здоровья программиста и системы  Смеющийся Когда человек совершает покупку, он руководствуется не тем, сколько у него денег накоплено всего, а тем, сколько он может потратить сейчас  Улыбающийся Ну, может кто-то поступает иначе, но это обычно приводит к плачевным последствиям  Улыбающийся А в итоге все к тому, что надо просто ловить исключения при выделении памяти  Смеющийся
« Последнее редактирование: Май 16, 2014, 14:34 от OKTA » Записан
cdsmika
Гость
« Ответ #16 : Май 16, 2014, 14:42 »

Ну так я и не призываю выделять под свои программы 10 мегабайт и ни байта больше  Смеющийся
Я говорю о том, что пользоваться тем надо, что может дать операционная система, на которой работает программа, а не планки, установленные в машину) И то по-возможности стараться минимизировать) Динамическая работа с памятью - залог здоровья программиста и системы  Смеющийся Когда человек совершает покупку, он руководствуется не тем, сколько у него денег накоплено всего, а тем, сколько он может потратить сейчас  Улыбающийся Ну, может кто-то поступает иначе, но это обычно приводит к плачевным последствиям  Улыбающийся А в итоге все к тому, что надо просто ловить исключения при выделении памяти  Смеющийся
Как определить то это магическое число, которое можно юзать? Откуда мне знать 10 метров или 100? Наобум? Или как предлагают ехепшонами опытным путем? Будет ли гарантия, что на всех компах оно одинаково?
Записан
OKTA
Гость
« Ответ #17 : Май 16, 2014, 14:53 »

Вот так (http://www.cplusplus.com/reference/new/bad_alloc/):
Код:
 try
  {
    int *myarray= new int[10000];
  }
  catch (std::bad_alloc& ba)
  {
    std::cerr << "bad_alloc caught: " << ba.what() << '\n';
  }
Ну и соответственно так же можно "затрайкэтчить" append.
Оно одинаково это что?
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #18 : Май 17, 2014, 01:38 »

А ~400 Мб не многовато для стековой переменной?
как узнать многовато или нет?
В винде для потока (thread) по умолчанию для стека выделяется 1 Мб памяти.
Записан
Bepec
Гость
« Ответ #19 : Май 17, 2014, 08:15 »

Не надо таких сравнений Улыбающийся У нас же QThread Улыбающийся
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #20 : Май 17, 2014, 14:45 »

Не надо таких сравнений Улыбающийся У нас же QThread Улыбающийся
На счет сравнений это мне?
Записан
Bepec
Гость
« Ответ #21 : Май 17, 2014, 14:49 »

Угум. Тем более что QThread не имеет таких явных ограничений.

PS я не особо разбираюсь в тонкостях этого вопроса, но 1Гб данных на стеке держал спокойно Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #22 : Май 17, 2014, 14:54 »

Угум. Тем более что QThread не имеет таких явных ограничений.
QThread это просто класс врапер на системными нитками. Под Вендой он создаёт обычную вендовую нить, со всеми её ограничениями.

PS я не особо разбираюсь в тонкостях этого вопроса
Это видно.

но 1Гб данных на стеке держал спокойно Улыбающийся
Не придумывайте.
Записан
Bepec
Гость
« Ответ #23 : Май 17, 2014, 14:58 »

Таки да, попутал названия Улыбающийся
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #24 : Май 17, 2014, 14:59 »

Угум. Тем более что QThread не имеет таких явных ограничений.
Первое, у ТС Windows, об этом он сообщал. Второе, QThread в Windows обертка над виндовым потоком.
В документации к QThread сообщается:
Цитировать
the maximum stack size is automatically determined by the operating system.
Теперь топаем в msdn и видим, что по умолчанию размер стека равен 1 mb. И там же читаем как это можно изменить.

PS я не особо разбираюсь в тонкостях этого вопроса
Так разберитесь.

но 1Гб данных на стеке держал спокойно Улыбающийся
пример проекта "в студию"
Записан
Bepec
Гость
« Ответ #25 : Май 17, 2014, 15:10 »

Johnik - да, я ошибся (повторюсь специально для вас) Улыбающийся Терминология у меня хромает ^.^
Собственно я уже почитал, попробовал и признал свою ошибку Веселый

Записан
OKTA
Гость
« Ответ #26 : Май 19, 2014, 09:19 »

А при чем здесь стэк в конце концов? Во время append используется не стэк, а динамическая память же  Непонимающий
Записан
Bepec
Гость
« Ответ #27 : Май 19, 2014, 10:16 »

Я честно не понимаю в чём проблема Улыбающийся
Судя по опыту - всё работает нормально и в штатном режиме.
Есть только пара вариантов:
1) программа к моменту выделения памяти уже заняла более 1,3 Гб памяти (+525 мб + погрешность и >2 Гб и вылет).
2) Где то бьётся память в программе.
Записан
OKTA
Гость
« Ответ #28 : Май 19, 2014, 10:47 »

А у меня при запуске этого теста из креатора сжирается около 500 метров и помирает  Смеющийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #29 : Май 19, 2014, 10:51 »

А у меня при запуске этого теста из креатора сжирается около 500 метров и помирает  Смеющийся
Для 32 битных платформ это нормально.
Записан
Страниц: 1 [2] 3 4 ... 7   Вверх
  Печать  
 
Перейти в:  


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