Mã của tôi là như dưới đây:C++ vấn đề phân bổ bộ nhớ
#include <string.h>
int main()
{
int ii = 123;
char str[7] = "";
strcpy(str,"123456");
return 0;
}
tôi chạy này trong VS2010, bộ nhớ là như dưới đây
Tôi tò mò những gì cc
trong bộ nhớ sử dụng cho? Và số lượng cc
được tính như thế nào?
Và tại sao MS chọn '0xCC' làm giá trị điền? Bởi vì '0xCC' là lệnh breakpoint một byte trong tập lệnh x86. Bằng cách đó, nếu bạn vô tình thực hiện bộ nhớ không được lấp đầy, nó sẽ đạt đến điểm ngắt ngay lập tức. –
@Rob Điều đó tôi không biết. :) Tôi cho rằng nó ít liên quan hơn đến mức chúng ta có bảo vệ bộ nhớ? – Mysticial
@Mysticial: không thực sự: chỉ hoạt động ở cấp độ trang (toàn bộ trang có thể được đánh dấu là có thể thực thi được hay không, và chỉ khi CPU, HĐH và quy trình đồng ý bật NX-bit). Nhưng nếu bạn sử dụng 40 byte mã trong một trang 2KB thì sao? Trang phải được đánh dấu là có thể thực thi được, phần còn lại của trang có thể chạy được, nhưng chứa rác :) – jalf