Tôi thấy rằng khi chúng tôi sử dụng nested functions, GCC yêu cầu ngăn xếp thực thi cho trampoline code. Tuy nhiên, mã sau đây, khi được biên dịch bằng gcc không hiển thị ngăn xếp thực thi. (Tôi đã sử dụng execstack để xác minh xem ngăn xếp có thể thực thi được)Ví dụ về chồng thực thi trong Linux (kiến trúc i386)
#include <stdio.h>
#include <unistd.h>
int main()
{
int add(int a, int b)
{
return a + b;
}
return add(2, 3);
}
Tại sao điều này không dẫn đến chồng thực thi? Và nếu nó không phải là nghĩa vụ, sau đó ai đó có thể đưa ra ví dụ về một mã xây dựng mà không cho một chồng thực thi?
Tôi nghĩ chức năng được xác định tại địa phương không cần chồng thực thi vì mã của họ vẫn còn lưu trữ trong phần mã tương tự như các chức năng khác, chứ không phải trên cây rơm. –