LINUX.ORG.RU

Вообще тут нужна конкретика. Передать всегда можно указатель.

Deleted
()
Ответ на: комментарий от xperious

Не могу. Давай пойдём другим путём. Покажи мне объект размером в 10Гб, который якобы не пролезет в сигнал-слот.

Deleted
()
Ответ на: комментарий от xperious

Тогда ты будешь передавать дескриптор файла/указатель на данные или ещё что, а не сам объект. Ведь сигналы-слоты - это просто функции, а стек сравнительно маленький, около 1Мб.

Deleted
()

Через сигнал можно передать произвольный объект. При передаче для него ЕМНИП будет вызван конструктор копирования. Так что я не особо понимаю зачем передавать что-то больше трёх слов не по ссылке или через какой-нибудь хитрый умный указатель (а половина Qt-шных не QObject'ов и есть хитрый указатель на массив байт).

KblCb ★★★★★
()

Столько, сколько нужно.

На самом деле это скорее зависит от «соглашения о вызове» (т.е. ABI), нежели от самой библиотеки.

RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 1)
Ответ на: комментарий от UVV

Это только в быдлоглибц, в кошерном musl libc - 80кб

anonymous
()

Если мыслить на уровне метакомпиляции Qt. В некоторых случаях, сигнал, это вызов метода, который делает прямой вызов метода слота. Да это грубо. Как и грубо то, что иногда emit — это пустая строка.

Отсюда вопрос C++ разработчику, который знает как работает железо. Какой максимальный размер данных при вызове метода? Зависит от ОС и сколько размера стека она выделяет(«stack overflow»). А если через указатели то там неважно. Это не DBus, где какие-то ограничения встречаются.

bs1988
()

Всё qt-структуры данных (включая domxml, строки, bytearray) имеют COW, поэтому их можно передавать по значению, это не будет приводить к копированию. Вот копирование этих 10гб при случайном изменении может стать проблемой.

Поэтому я бы пересмотрел архитектуру приложения.

vzzo ★★★
()

Например, ты можешь передать хоть два гигабайта пи помощи QByteArray через сигнал-слот, ведь данные при передаче этих объектов копироваться не будут, в Qt действует механизм copy-on-write, т.е. копирование только тогда, когда объект будет модифицироваться.

On the plus side, Qt containers are implicitly shared, so copies are shallow. In contrast, all STL containers except std::string are required to use deep copy.

https://en.wikipedia.org/wiki/Copy-on-write

Лично меня это практически всегда выручает и радует...

I-Love-Microsoft ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.