Массив X должен вести себя как указатель на непрерывный список X в памяти, так же, как указатель. Однако нигде не написано, где память, в которой хранятся эти данные, должна иметь собственный адрес и возможность записи. В случае явного указателя существует новое выделение для этого адреса (в данном случае стека), однако для массива в стеке компилятор уже знает, где находится содержимое, поэтому новое выделение не требуется.
Как следствие, небезопасно рассматривать его как указатель без индексации. например :
pArray = nullptr; // This is a memory leak, unless a copy is taken, but otherwise fine.
array = nullptr; // This is will make the compiler upset
Причина, по которой сигналы нуждаются в отдельном стеке, заключается в том, что, если нормальный стек поврежден или переполнен, сигнал все еще может выполняться. Я думаю, что стек сигналов обычно распределяется динамически, но это может быть реализовано в любом случае. Вы можете установить новый стек сигналов с помощью sigaltstack
. Он одинаков для всех сигналов.
] Другой, более эзотерической причиной является создание потоков пользовательского уровня. См. статью Ральфа Энгельшала "Портативная многопоточность": []http://www.gnu.org/software/pth/rse-pmt.ps[]. В ней описывается, как "трюк с сигнальным стеком на батуте" используется для осуществления потоков пользовательского уровня.[
].