Sau khi biên dịch của C++ file (với đối tượng tĩnh toàn cầu) tôi nhận được trong nm
đầu ra chức năng này:g ++ __static_initialization_and_destruction_0 (int, int) - đó là những gì
00000000 t _Z41__static_initialization_and_destruction_0ii
__static_initialization_and_destruction_0(int, int) /* after c++filt */
nó là gì? Nó sẽ gọi __cxa_atexit()
Tôi có thể vô hiệu hóa việc tạo chức năng này (và gọi __cxa_atexit()
) và đặt tất cả lệnh gọi hàm và hàm hủy đến .ctors
và .dtors
?
g ++ có tùy chọn dòng lệnh '-fno-use-cxa-atexit' nhưng tôi không nghĩ điều đó sẽ hữu ích. Có vẻ như nó chỉ khiến 'atexit()' được sử dụng thay cho 'cxa_atexit()'. Có lẽ câu hỏi hay hơn là hỏi tại sao g ++ tạo '__static_initialization_and_destruction_0()' để bắt đầu thay vì đặt các hàm tạo và hủy trong các phần '.ctors' và' .dtors' ELF. Có lẽ có một lý do chính đáng cho nó. – Void