01/10/2018, 14:52
Địa chỉ vùng nhớ
int tong(int a,int b)
{
return a + b;
}
void main()
{
int x,y;
x=y=10;
tong(x,y);
}
hàm main PC cấp mình 2 vùng nhớ x và y có kích thước kiểu int khi truyền đối số vào hàm tổng trong hàm tổng nó cấp mình thêm 2 vùng nhớ a và b nữa vậy cho mình hỏi sau khi ra khỏi hàm tổng thì 2 địa chỉ vùng nhớ a và b khi ra khỏi hàm có tự giải phóng hay ko nếu ko thì cho mình hỏi là
1.PC 1 khi đã cấp phát vùng nhớ thì vùng nhớ đó nó sẽ tồn tại(chiếm dụng) xuyên suốt chương trình có phải ko
2.nếu muốn PC thu hồi lại vùng nhớ đó thì phải dùng delete(c++) và free© có phải ko ?
Bài liên quan
a,b
: đây là tham trị nên nó sẽ chết ngay sau khi ra khỏi{}
.x, y
nó tạo ở trong main nên tương tự, đến cuối}
sẽ bị thu hồi.delete và free chỉ có tác dụng với con trỏ.
delete thì còn có chức năng là tự sát đối với các đối tượng mà bạn không muốn nó sống quá lâu, ví dụ:
=> Thằng
tusat
sẽ chết (bị thu hồi) ngay sau khi khởi tạo.oke mình chỉ muốn biết vùng nhớ đó thế nào sau khi ra khỏi hàm thôi vậy chứ mấy giá trị nó lưu vào đâu nhỉ nếu pc thu hồi ?
Nó sẽ có thể còn sống, cũng có thể bị chương trình khác lấy đi, hoặc os thu hồi về RAM.
Nhưng dù sao nó cũng không còn là biến thuộc về chương trình đó nữa
mình cứ nghĩ là con trỏ với biến thường cũng phải thu hồi lại vùng nhớ sau khi tạo ra chứ nhưng mà tóm lại sau khi ra khỏi hàm thì nó ko còn chiếm dụng vùng nhớ nữa phải ko ? tại lúc đọc về truyền tham biến với truyền giá trị vào nó ghi là tốn vùng nhớ vì nó tạo ra bản sao giá trị nên mình tưởng là nó tốn vùng nhớ
Biến chỉ tồn tại trong scope tạo ra nó:
biến hay scope thì mình biết rồi đó cũng chỉ là cái tên định danh do user đặt chứ địa chỉ vùng nhớ mới là thứ mình quan tâm sau khi nó biến mất thì nó vẫn còn đó hay đc thu hồi lại thôi.
chẳng là học con trỏ sau khi cấp phát thì phải thu hồi vùng nhớ thì tự nhiên nghĩ đến mấy cái hàm lúc mình tạo 1 biến mới trong hàm thì tại sao lại ko phải thu hồi lại nhỉ nên mới lên đây hỏi thôi.
sau khi chương trình chạy kết thúc thì vùng nhớ đó chỉ có 1 trong 2 khả năng,
Tại sao lại có việc cấp phát và thu hồi vùng nhớ:
Vì hồi xưa(1880 - 2000) vùng nhớ ít, nếu không có việc quản lý việc cấp phát vùng nhớ thì dẫn đến OS bị quá tải khi cấp phát vùng nhớ quá số lượng cho phép.
Không hẳn, đến bây giờ và mai sau vẫn cần phải thu hồi, nhưng giờ là tự động thu hồi.
Bạn hiểu đơn giản thế này.
Biến là một cái tivi
Nó nằm trong nhà bạn (scope) -> Bạn xài thoải mái
Nhưng nếu bạn không xài nữa thì bạn vứt ra ngoài đường (ra khỏi scope), lúc này sẽ có 2 trường hợp xảy ra: