Có thể nó khác với nền tảng, nhưngTại sao malloc khởi tạo các giá trị bằng 0 trong gcc?
khi tôi biên dịch bằng gcc và chạy mã bên dưới, tôi nhận được 0 mỗi lần trong ubuntu 11.10.
#include <stdio.h>
#include <stdlib.h>
int main()
{
double *a = (double*) malloc(sizeof(double)*100)
printf("%f", *a);
}
Tại sao malloc hoạt động như thế này mặc dù có calloc?
Điều đó có nghĩa là có chi phí hiệu năng không mong muốn chỉ để khởi tạo các giá trị thành 0 ngay cả khi bạn không muốn nó là đôi khi?
EDIT: Oh, ví dụ trước của tôi không phải là initiazling, nhưng đã xảy ra để sử dụng khối "mới".
Những gì tôi một cách chính xác đang tìm kiếm là lý do tại sao nó khởi nó khi nó phân bổ một khối lớn:
int main()
{
int *a = (int*) malloc(sizeof(int)*200000);
a[10] = 3;
printf("%d", *(a+10));
free(a);
a = (double*) malloc(sizeof(double)*200000);
printf("%d", *(a+10));
}
OUTPUT: 3
0 (initialized)
Nhưng nhờ đã chỉ ra rằng có một lý do an ninh khi mallocing! (Không bao giờ nghĩ về nó). Chắc chắn nó phải khởi tạo bằng không khi phân bổ khối mới, hoặc khối lớn.
Đối với một thử nghiệm thực tế hơn, Bạn đã thử phân bổ, giải phóng và sau đó phân bổ một lần nữa (có thể lặp đi lặp lại mỗi nhiều lần)? Chỉ vì malloc trả về bộ nhớ zero-initialized lần đầu tiên không có nghĩa là bạn có thể tin tưởng vào nó nói chung. – user786653
Nó cũng có thể là bộ nhớ đã được thiết lập 0 bởi hệ điều hành hoặc một cái gì đó và 'malloc' không có gì để làm với nó. –
[Không đưa kết quả của 'malloc' vào C] (http://stackoverflow.com/q/605845/995714) –