Melaraskan Saiz Tindanan dalam Linux untuk Aplikasi C Menggunakan Pengkompil GNU
Di Linux, saiz tindanan untuk aplikasi C yang disusun dengan pengkompil GNU boleh diubah suai untuk mengelakkan ralat limpahan tindanan. Walaupun sintaks yang digunakan dalam OSX (LD_FLAGS= -Wl,-stack_size,0x100000000) mungkin tidak berfungsi pada SUSE Linux, terdapat kaedah alternatif untuk mencapai hasil yang sama.
Satu pendekatan ialah meningkatkan saiz tindanan secara pemprograman dalam aplikasi itu sendiri. Ini boleh dilakukan menggunakan fungsi setrlimit yang disediakan oleh
#include <sys/resource.h> int main(int argc, char **argv) { const rlim_t kStackSize = 16 * 1024 * 1024; // min stack size = 16 MB struct rlimit rl; int result; result = getrlimit(RLIMIT_STACK, &rl); if (result == 0) { if (rl.rlim_cur < kStackSize) { rl.rlim_cur = kStackSize; result = setrlimit(RLIMIT_STACK, &rl); if (result != 0) { fprintf(stderr, "setrlimit returned result = %d\n", result); } } } // ... return 0; }
Dengan meningkatkan saiz tindanan dalam aplikasi, anda boleh memastikan bahawa ia mempunyai peruntukan memori yang mencukupi untuk mengendalikan operasi kompleks atau struktur data yang besar tanpa menghadapi ralat limpahan tindanan. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pembolehubah tempatan yang terlalu besar harus diisytiharkan dalam fungsi yang dipanggil dari utama untuk mengelakkan limpahan tindanan sebelum kod getrlimit/setrlimit berkuat kuasa.
Atas ialah kandungan terperinci Bagaimana untuk Melaraskan Saiz Tindanan untuk Aplikasi C pada Linux Menggunakan Pengkompil GNU?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!