Задача-c: Как блоки создаются на низком уровне и по какой цене? - PullRequest
1 голос
/ 22 апреля 2019

Не удалось найти подробное описание.

Это объект или функция?

Он создается во время выполнения по требованию, во время компиляции или на этапе загрузки?

Где они создаются: в куче или в стеке?

Какова процедура вызова и порядок?

1 Ответ

2 голосов
/ 23 апреля 2019

Это объект или функция?

Оба; блок - это фактически захваченный бит состояния, который также вызывается как функция. Компилятор объединяется, чтобы сделать объект его частью в основном прозрачным (особенно с ARC).

Он создается во время исполнения по требованию, во время компиляции или на этапе загрузки?

Время выполнения или время компиляции, в зависимости от блока.

Блок, который не захватывает состояние, может быть полностью создан во время компиляции. Блок, который фиксирует состояние, которое может быть известно только во время выполнения, будет создан во время выполнения.

Где они создаются: в куче или в стеке?

Оба; действительно, стековая, куча или статическая память, отображаемая RO (т.е. блок времени компиляции).

Блоки (это состояние захвата) обычно создаются в стеке, а затем переходят в кучу при первой операции Block_copy ().

Каков порядок и порядок вызова?

Непонятно, о чем вы здесь спрашиваете. Блоки вызываются точно так же, как функции C, где первый аргумент всегда является ссылкой на объект блока, давая возможность для захвата захваченного состояния.

...