QopenGLWidget paintGL запускается только resizeGL

По-моему, alloca (), где доступно, следует использовать только ограниченным образом. Очень похоже на использование «goto», довольно много других разумных людей испытывают сильное отвращение не только к использованию, но и к существованию alloca ().

Для встроенного использования, где размер стека известен, и ограничения могут быть навязаны посредством соглашения и анализа по размеру распределения, и когда компилятор не может быть обновлен для поддержки C99 +, использование alloca () в порядке, и я, как известно, использовал его.

Когда доступно, VLA могут иметь некоторые преимущества перед alloca (): компилятор может генерировать контрольные лимиты стека, которые будут захватывать доступ к ограничениям при использовании доступа к стилю массива (я не знаю, компиляторы делают это, но это можно сделать), и анализ кода может определить, правильно ли ограничены выражения доступа к массиву. Обратите внимание, что в некоторых средах программирования, таких как автомобильная, медицинская техника и авионика, этот анализ необходимо проводить даже для массивов фиксированного размера, как автоматического (в стеке), так и статического распределения (глобального или локального).

В архитектурах, в которых хранятся как данные, так и обратные адреса / указатели кадров в стеке (из того, что я знаю, это все они), любая переменная, назначенная стеком, может быть опасной, поскольку адрес переменной может быть взят и непроверенный ввод значения могут допускать всевозможные ошибки.

Переносимость менее опасна во встроенном пространстве, однако это хороший аргумент против использования alloca () вне тщательно контролируемых обстоятельств.

Вне встроенного пространства я использовал alloca () в основном внутри функций ведения журнала и форматирования для эффективности и в нерекурсивном лексическом сканере, где временные структуры (выделенные с помощью alloca () создаются во время токенизации и классификации, тогда постоянный объект (выделен через malloc ()) до того, как функция вернется. Использование alloca () для небольших временных структур значительно сокращает фрагментацию, когда выделяется постоянный объект.

0
задан xjsXjtu 16 January 2019 в 07:03
поделиться

1 ответ

Наконец, я нахожу ответ.

Мне нужно вызвать метод qt update () в главном потоке. Вы можете достичь этого с помощью sig-slot QT.

Мне просто интересно, почему update () должен вызываться в основном потоке, это ошибка QT?

0
ответ дан xjsXjtu 16 January 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: