01/10/2018, 08:24

Số lượng biến có thể khai báo trong Pascal?

Sáng nay thầy có hỏi lớp em là trong pascal có thể khai báo bao nhiêu biến, em trả lời là tùy thuộc vào dung lượng bộ nhớ, nhưng thầy lại bảo là không giới hạn, vậy thực hư ra sao nhỉ các pro ? :v

Hung viết 10:35 ngày 01/10/2018

Không giới hạn ư? Nếu vậy thì trong Pascal đã không có thông báo lỗi: Too many variables

Long Dragon viết 10:38 ngày 01/10/2018

Em có search trên Google thì tìm thấy như sau:

Lỗi 96. Too many variables: Quá nhiều biến.
Nguyên nhân xuất hiện lỗi có thể là:

  • Tổng kích trước của các biến toàn cục vượt quá 64 KB.
  • Tổng kích thước của các biến cục bộ mô tả trong thủ tục hoặc hàm vựot quá 64 KB.

Cho em hỏi vì sao vượt quá 64 KB là lỗi ạ ? (vì 64 KB khá là nhỏ ~~)

rogp10 viết 10:28 ngày 01/10/2018

Cái này chắc của thằng Turbo. Lí do rất là bí hiểm và lắt léo.

Thực ra nó ntn: Hồi xưa không gian bộ nhớ chỉ có 20 bit (do chip có ít chân), vì vậy mấy ông “thần” nghĩ ra một kiến trúc ntn: một ô nhớ sẽ có địa chỉ gồm 2 khối 16 bit, bên trái gọi là số hiệu segment và bên phải gọi là ô nhớ. Một stack chỉ được phép nằm gọn trong segment.

Long Dragon viết 10:29 ngày 01/10/2018

Cái này chắc của thằng Turbo. Lí do rất là bí hiểm và lắt léo.

The’ con` Free Pascal thi sao a ?
Vi lop’ e toan dung Free Pascal chu ko phai turbo pascal

rogp10 viết 10:34 ngày 01/10/2018

Chắc cỡ 1MB đấy. Sau này không còn cái segment đấy nữa nên chỉ dựa vào setting thôi.

Long Dragon viết 10:37 ngày 01/10/2018

Chắc cỡ 1MB đấy. Sau này không còn cái segment đấy nữa nên chỉ dựa vào setting thôi.

Thiệt ko anh ? Tổng kích thước tất cả các biến khai báo trong Free Pascal vượt quá 1MB là lỗi ạ ? (để em còn lên “cãi lý” với thầy nữa )

rogp10 viết 10:24 ngày 01/10/2018

Dựa vào setting nhé. Mặc định là 16K/1M.

Long Dragon viết 10:25 ngày 01/10/2018

16 KB / 1 máy hả anh ??
Nhưng tóm lại là đáp án “Không giới hạn” không chính xác phải không ?

*grab popcorn* viết 10:33 ngày 01/10/2018

Nhưng tóm lại là đáp án “Không giới hạn” không chính xác phải không ?

Không giới hạn là chính xác.
Vì không có nơi nào quy định về số lượng của biến trong pascal cả và như a rogp10 nói thì nó chỉ dựa vào setting của compiler.

Và theo mình nhớ thì FPC cho phép ko giới hạn.

Long Dragon viết 10:32 ngày 01/10/2018

Uhmmm … Vậy trong C/C++ thì điều này có được cho phép ko a ?

*grab popcorn* viết 10:35 ngày 01/10/2018

C/C++ biến toàn cục đc khai báo tùy thích, nhiêu cũng được.

Còn biến cục bộ dựa vào giới hạn của stack

rogp10 viết 10:31 ngày 01/10/2018

Không set lên 2GB là tối đa rồi. http://www.freepascal.org/docs-html/prog/progsu102.html

*grab popcorn* viết 10:28 ngày 01/10/2018

Cái đó là stacksize mà a rogp10

Bài liên quan
0