2012-02-08 11 views
5

WinNT.h में स्थित ANYSIZE_ARRAY का उद्देश्य क्या है?<winnt.h> में ANYSIZE_ARRAY का उद्देश्य क्या है?

मैं 2004 से इसके बारे में एक एमएसडीएन ब्लॉग पोस्ट देखता हूं लेकिन यह मुझे समझ में नहीं आता है।

+0

कृपया हमें एमएसडीएन ब्लॉग पोस्ट से लिंक दें? –

+0

@ एग्नेल http://blogs.msdn.com/b/oldnewthing/archive/2004/08/26/220873.aspx – jglouie

उत्तर

5

मुझे लगता है कि आप this blog post के बारे में बात कर रहे हैं।

यह अक्सर जब एक चर आकार (संकलन समय पर अज्ञात) सरणी एक struct का हिस्सा है प्रयोग किया जाता है:

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

उन संरचनाओं के साथ काम करने के लिए आप अक्सर पहले वांछित एपीआई के आकार पाने के लिए फोन डेटा, फिर स्मृति के एक ब्लॉक को काफी बड़ा आवंटित करें और आखिरकार एक ही एपीआई को फिर से कॉल करें ताकि यह डेटा भर सके ...

+0

धन्यवाद - एक लिंक की गई सूची में इसका उपयोग क्यों करें? – jglouie

+1

@LemonBeagle एक लिंक्ड सूची में अधिक मेमोरी की आवश्यकता होती है और/या एपीआई कार्यान्वयन में पहले से ही एक सरणी में आइटम हो सकते हैं और इसे कॉलर्स बफर में बस याद कर सकते हैं। वस्तुओं की सूची में चलना भी धीमा है और आपको प्रत्येक आइटम को मुक्त करना है न कि केवल एक बड़ा बफर ... – Anders

1

this page से:

सी में, एक चर आकार सरणी a[1] या a[ANYSIZE_ARRAY], जहां ANYSIZE_ARRAY1 के रूप में परिभाषित किया गया है के रूप में घोषित किया गया है। फिर यह प्रयोग किया जाता है जैसे कि यह बड़ा था।