STDIO
Tìm kiếm gần đây
    Nội dung
    0
    0
    Chia sẻ
    Nội dung
    0
    0
    Chia sẻ

    Tổ Chức Bộ Nhớ Chương Trình

    Tổ chức bộ nhớ của 1 chương trình C/C++ với các segments: Stack segment, Heap segment, Data segment, Code segment.
    23/07/2015 04/09/2020 3 phút đọc
    Tổ Chức Bộ Nhớ Chương Trình

    Giới thiệu

    Khi một chương trình được thực thi, nó sẽ được nạp vào bộ nhớ, vậy quá trình đó được thực hiện và tổ chức như thế nào?

    Khi khai báo một biến trong C/C++, biến này chứa 2 thể hiện là địa chỉ và giá trị. Không chỉ có biến mà các đoạn mã nguồn cũng có địa chỉ và giá trị.

    Khi chương trình được khởi chạy, hệ điều hành sẽ tổ chức 4 vùng nhớ logic, có kích thước tương ứng với kích thước của 4 vùng nhớ mà chương trình cần sử dụng, được gọi là Memory Segment. Biến và mã thực thi sẽ được lưu trữ trong các Segment này.

    Các vùng nhớ

    Code Segment

    Mã nguồn của chương trình sau khi hoàn tất quá trình Build sẽ chuyển thành các đoạn mã thực thi, mã máy 0 và 1. Khi chương trình khởi chạy, mã thực thi sẽ được nạp vào Code Segment. Cách để truy xuất vào vùng nhớ này là sử dụng con trỏ hàm.

    Code Segment có kích thước cố định sau khi nạp chương trình và có 1 tên gọi khác là Text Segment.

    Data Segment

    Khi chương trình khởi chạy, toàn bộ các biến toàn cục (global) và static (static int count;) được lưu trữ ở đây, các đoạn chuỗi cố định ("Hello World", "Welcome to", ...) cũng được lưu trữ trong Data Segment.

    Data Segment có kích thước cố định sau khi nạp hoàn tất.

    Stack Segment

    Là vùng nhớ được tương tác nhiều khi lập trình, khi một hàm được gọi, stack frame của hàm đó sẽ được đưa vào vùng nhớ Stack như các biến được khai báo trong hàm hoặc cũng được đưa vào vùng nhớ Stack. Khi hàm kết thúc, toàn bộ các biến trong hàm cùng với bản thân hàm sẽ được tự động giải phóng để các hàm sau sử dụng.

    Stack Segment có kích thước cố định, khi khai báo quá nhiều biến hoặc một mảng có số lượng phần tử quá lớn, một hàm đệ quy quá sâu, ... bộ nhớ Stack sẽ bị đầy, dẫn đến chương trình bị bắt buộc dừng do lỗi phổ biến - stack overflow.

    Heap Segment

    Vùng nhớ khác cần quan tâm, vùng nhớ này phải hoàn toàn kiểm soát nó. Khi sử dụng con trỏ và cấp phát động một vùng nhớ cho con trỏ quản lý, vùng nhớ này sẽ nằm trong Heap Segment. Những vùng nhớ được cấp phát động sẽ không tự động thu hồi khi khối lệnh kết thúc, lập trình viên phải chủ động thu hồi khi không còn nhu cầu sử dụng.

    Heap Segment dành cho việc cấp phát khi chương trình thực thi, nó còn được gọi là vùng nhớ động, kích thước của nó có thể tăng hoặc giảm tùy vào nhu cầu sự cấp phát động. Heap có thể mở rộng cho đến khi bộ nhớ đầy, cần kiểm soát thật tốt, thu hồi các vùng nhớ được cấp phát động khi không còn nhu cầu sử dụng để có thêm vùng nhớ khi cần.

    0 Bình luận
    Modern C++

    Modern C++

    STDIO Training - Đào Tạo Lập Trình C++.

    Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO

    Trang chính

    Công ty TNHH STDIO

    • 30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn
    • 383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012
    ©STDIO, 2013 - 2021