2009-08-12 33 views
24

Điều đó có nghĩa là gì và làm thế nào quan trọng để biết về nó cho một lập trình C/C++?Bản ghi kích hoạt trong ngữ cảnh của C và C++ là gì?

Có giống nhau trên nền tảng, ít nhất là về mặt khái niệm?

tôi hiểu nó như một khối bộ nhớ được phân bổ sử dụng để lưu trữ biến địa phương bằng một hàm ...

Tôi muốn biết thêm

+7

AKA ngăn xếp khung - xem http://en.wikipedia.org/wiki/Activation_record # Cấu trúc –

+1

@Neil, nhận xét của bạn phải là câu trả lời. –

+0

Tôi đồng ý, nhưng tôi nghĩ @LB đã đánh bại anh ấy :) – vehomzzz

Trả lời

33

Bản ghi kích hoạt là một tên khác cho Stack Frame . Đó là cấu trúc dữ liệu tạo ra một ngăn xếp cuộc gọi. Nó thường bao gồm:

  • Người dân địa phương để callee
  • địa chỉ
  • Quay lại gọi
  • Các thông số của callee

Các Call Stack do đó bao gồm bất kỳ số lượng hồ sơ kích hoạt mà được thêm vào ngăn xếp khi các chương trình con mới được thêm vào và được loại bỏ khỏi ngăn xếp (thường) khi chúng trở lại.

Cấu trúc và thứ tự của các yếu tố thực tế là nền tảng và thậm chí là việc triển khai được xác định.

Đối với lập trình viên C/C++, Kiến thức chung của cấu trúc này hữu ích để hiểu các tính năng triển khai nhất định như Quy ước cuộc gọi và thậm chí tại sao tràn bộ đệm cho phép mã độc hại của bên thứ ba được chạy.

A more kiến ​​thức thân mật sẽ tiếp tục các khái niệm ở trên và cũng cho phép lập trình gỡ lỗi ứng dụng của chúng và đọc bộ nhớ ngay cả khi không có trình gỡ lỗi hoặc biểu tượng gỡ lỗi.

Mặc dù vậy, một lập trình viên C/C++ có thể đi theo một phần lớn trong sự nghiệp lập trình của người chơi mà không cần phải gọi ngay lập tức.

+0

@Alexandre Bell Tôi hiểu từ những gì bạn đề cập đến AR (stack frame) chứa các vars cục bộ, địa chỉ ret và params. Câu hỏi của tôi là: mã của hàm được gọi là ở đâu? –

+3

@FernandoGabrieli Có các phân đoạn khác nhau trong C như phân đoạn mã, phân đoạn ngăn xếp, phân đoạn heap. do đó, mã chức năng sẽ được lưu trữ trên đoạn mã. tham khảo [this] (http://www.geeksforgeeks.org/memory-layout-of-c-program/) – Abhisek

7

kích hoạt kỷ lục không phải là một khái niệm được sử dụng nhiều nói về C hoặc C++ langauges. Định dạng của bản ghi kích hoạt là nền tảng rất cụ thể. Về mặt khái niệm, các tham số được truyền đi như thế nào, thời gian tồn tại của các biến cục bộ, nơi các hàm trả về và cách ngăn xếp cuộc gọi được mở ra để đáp ứng với một lệnh ném là tất cả các phần quan trọng của C++ và (ngoại trừ C sau). . Chi tiết về cách chúng được triển khai sẽ ảnh hưởng đến một bản ghi kích hoạt trông như thế nào đối với một nền tảng cụ thể nhưng không cần thiết để viết mã bằng C++ hoặc C.

-2

Biên kích hoạt chứa ba điều sau đây 1.Function nét nét 2.Variable 3.Function ứng dụng (chức năng gọi)

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