2012-02-08 5 views
5

Mục đích của ANYSIZE_ARRAY, nằm trong WinNT.h là gì?Mục đích của ANYSIZE_ARRAY trong <winnt.h> là gì?

Tôi thấy một bài đăng trên blog MSDN về nó từ năm 2004 nhưng điều đó không có ý nghĩa với tôi.

+0

Vui lòng cung cấp cho chúng tôi liên kết tới bài đăng blog MSDN? –

+0

@Agnel http://blogs.msdn.com/b/oldnewthing/archive/2004/08/26/220873.aspx – jglouie

Trả lời

5

Tôi giả sử bạn đang nói về this blog post.

Nó thường được sử dụng khi một mảng biến có kích thước (không rõ tại thời gian biên dịch) là một phần của một cấu trúc:

typedef struct { 
    int CommonFlags 
    int CountOfThings; 
    THING Things[ANYSIZE_ARRAY]; //Things[1]; 
} THINGSANDFLAGS; 

Để làm việc với những công trình bạn thường đầu tiên gọi API mong muốn để có được kích thước của dữ liệu, sau đó phân bổ một khối bộ nhớ đủ lớn và cuối cùng gọi lại cùng một API để nó có thể điền vào dữ liệu ...

+0

cảm ơn - tại sao lại sử dụng điều này trong danh sách được liên kết? – jglouie

+1

@LemonBeagle Một danh sách liên kết yêu cầu nhiều bộ nhớ hơn và/hoặc việc triển khai API có thể đã có các mục trong một mảng nội bộ và chỉ có thể ghi nhớ nó vào bộ đệm người gọi. Nó cũng là chậm hơn để đi bộ danh sách các mặt hàng và bạn phải giải phóng mỗi mục và không chỉ là một bộ đệm lớn ... – Anders

1

Từ this page:

Trong C, một mảng biến kích thước được khai báo là a[1] hoặc a[ANYSIZE_ARRAY], nơi ANYSIZE_ARRAY được định nghĩa là 1. Sau đó, nó được sử dụng như thể nó lớn hơn.