2009-01-25 39 views
5

Với đoạn mã này:Đâu là một mảng được khởi tạo bởi một danh sách bộ khởi tạo được lưu trữ?

(void)someFunction(void) { 
    int array[] = {1,2,3,4,5,6,7,8,9,10}; 
} 

Đâu là những giá trị của mảng lưu trữ?

  • Ngăn xếp?
  • Heap?
  • Cùng với các chuỗi ký tự chuỗi đó. (Được gọi là Heap tần số cao?)
  • Một nơi khác?

Tôi hỏi vì tôi không chắc chắn về câu hỏi này:

Create an array of integers property in objective-c

Trả lời

9

Mảng chính nó sẽ được phát trên stack. Sẽ có một chút mã khi nhập vào hàm sao chép các giá trị được lưu trữ trong một số mảng chưa đặt tên trong vùng bộ nhớ toàn cục/tĩnh vào mảng cục bộ trên ngăn xếp. Có khả năng mảng vô danh/tĩnh chưa được đặt tên với các giá trị ban đầu nằm trong cùng vùng nhớ chung như các chuỗi ký tự chuỗi.

Tuy nhiên, lưu ý rằng không có yêu cầu nào trong số này được yêu cầu theo tiêu chuẩn - nhưng nó thực sự là cách mà bất kỳ trình biên dịch nào sẽ triển khai nó. Một trình biên dịch đủ thông minh có thể nhận thấy rằng các giá trị đơn giản là các giá trị số nguyên tăng lên và có thể tạo ra một vòng lặp để khởi tạo mảng cục bộ,

(câu trả lời này giả định C/C++ - Tôi không biết liệu Objective-C có thay đổi điều này).

1

Như Micheal đã nói, nơi mà các giá trị của danh sách khởi tạo sẽ được lưu trữ phụ thuộc vào trình biên dịch và mức tối ưu hóa. Ví dụ: gcc không tối ưu hóa sẽ chỉ tạo mã để di chuyển các hằng số đến các vị trí thích hợp trong mảng, nghĩa là các giá trị thực tế sẽ chỉ được lưu trữ trong chính mã đó. Bạn có thể dễ dàng kiểm tra những gì sẽ xảy ra nếu bạn không biên dịch mã đối tượng, nhưng hãy để trình biên dịch đầu ra của trình biên dịch của bạn thay thế.

-1

Nếu bất kỳ ai đọc nội dung này đang xem xét cho C#, câu trả lời là khác nhau. Mảng là các kiểu tham chiếu, vì vậy các giá trị được lưu trữ trên heap và được gọi trên stack.

+0

Câu hỏi này là về C. Không liên quan gì đến C#. –

+0

Lý do câu trả lời của bạn không hữu ích là bạn chỉ nói về C#. Hãy tưởng tượng điều gì sẽ xảy ra nếu câu trả lời như vậy sẽ được đăng cho mọi ngôn ngữ ngoài C. Sự bổ sung của bạn sẽ được chào đón nhiều nhất, tuy nhiên, như một bình luận nói rằng điều này là đúng cho C và các ngôn ngữ khác, chẳng hạn như C#, mảng được lưu trữ trên heap . –

+0

Nước thịt. Không ai đọc nữa? Làm thế nào rõ ràng để tôi có được rằng điều này là dành cho những người chạy qua câu hỏi và muốn biết câu trả lời cho C#? – Rap

Các vấn đề liên quan