Hỏi về bộ nhớ DATA và BSS trong lúc thực thi code C

Em xin chào các bậc tiền bối . Chẳng là vừa rồi em có học về memory layout trong C. Em thử test viết 1 chương trình C và sau đó đo các thông số trong code đó. Theo lý thuyết em được hoc thì đáng lý ra bộ nhớ data của nó sẽ băng 0. Vì không có biến nào em khai báo và khởi tạo giá trị cho nó. Tất cả các biến em chỉ khai báo và không hề khởi tạo giá trị ban đầu. Nhưng lúc em build và test size thì bộ nhớ data lại ra 1 giá trị mà em không biết tại sao lại có nó và nó từ đâu ra giá trị đó . Dù em đã thử optimize, nhưng giá trị đó vẫn không thay đổi. Mong các tiền bối giúp đỡ giải thích dùm em với ạ ? Em tìm kiếm trên mạng nhưng vẫn không tìm ra câu trả lời cho vấn đề này ạ.

.data segment lưu trữ global variable, static variable, constant string. Nên bạn có global, static hoặc chuỗi bất kỳ thì sẽ được lưu trữ vô data segment thôi OvO
Mà khi lưu trữ thì phải chiếm một khoảng bộ nhớ nào đó. Thì 272 là khoảng bộ nhớ bị chiếm đó. Như "%d" sẽ được lưu vô data segment và chiếm 3 bytes.

4 Likes

:flushed: .data chiếm ít vậy sao. Mình tới tận ~3k

Có thể giải thích do OS (hoặc compiler) nhét thêm metadata hoặc data từ library ngoài vào nên .data mới phình ra như vậy. Còn cụ thể là gì thì bạn có thể tìm đọc format của nó, Windows có PE, Linux dùng ELF. Bảo là “memory layout trong C” chứ thật ra ngôn ngữ không có vai trò gì nhiều cả, vì mấy thứ này đều rất platform-dependent

2 Likes

cảm ơn anh rất nhiều ạ :smiley:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?