2010-02-25 29 views

Trả lời

11

Tùy chọn này an toàn nhưng khó gỡ lỗi hơn. Thông thường, trình biên dịch C xuất ra mã lưu trữ trong một thanh ghi thông thường (ebp trên x86) một con trỏ tới khung ngăn xếp cho hàm đó. Các trình gỡ rối sử dụng nó để in ra các nội dung biến cục bộ và các thông tin khác. Cờ chỉ thị cho gcc không bận tâm đến thanh ghi đó. Trong một số trường hợp, điều này có thể làm tăng hiệu năng một chút, chủ yếu là do giảm số lượng mã (tốt hơn cho bộ nhớ cache) và thanh ghi phụ có sẵn (đặc biệt là trên x86 ở chế độ 32 bit, bị bỏ quên trên sổ đăng ký).

+0

@Thomas bạn có thể cung cấp một số liên kết (nếu bạn biết) về chi tiết đăng ký như bạn đã đề cập. – Adil

+0

Xem http://refspecs.freestandards.org/elf/, đặc biệt là tài liệu "Giao diện nhị phân ứng dụng" cho các kiến ​​trúc bộ vi xử lý cụ thể. Trong ABI cho i386, định dạng khung xếp chồng chuẩn (có sử dụng 'ebp') được mô tả ở trang 36. Định dạng ELF là phổ biến đối với nhiều hệ thống giống Unix" hiện đại "(ví dụ: Linux và FreeBSD). Trên các hệ thống Windows, mọi thứ hơi khác nhau nhưng sử dụng cùng một nguyên tắc. –

2

Miễn là mã của bạn không dựa vào hành vi không xác định, thì nó hoàn toàn an toàn. Nó có thể gây ra lỗi hành vi không xác định để hiển thị mặc dù.

Các vấn đề liên quan