मैं इस सी परियोजना के बीच में हूं कि मैं बहुत मेमोरी कुशल बनाना चाहता हूं। कई मामलों में, मैं बिट्स को पकड़ने के लिए लिखे गए गतिशील सरणी संरचना के शून्य * का उपयोग कर रहा हूं। मैं सभी 64 (इस मामले में) बिट्स का उपयोग करना चाहता हूं।एक सी सूचक पर बिट बदलाव?
मुझे जल्द ही एहसास हुआ कि आप वास्तव में किसी सूचक पर कुछ भी छेड़छाड़ नहीं कर सकते हैं। तो मेरी समाधान था निम्नलिखित:
void *p;
((unsigned long)p) << 4;
((unsigned long)p) & 3;
यह काम किया हो जाता है, लेकिन केवल क्योंकि पर अपने कंप्यूटर, देशांतर और संकेत दिए गए आकार में बराबर हैं। क्या यह सभी (या अधिकतर) आर्किटेक्चर में होगा?
और मेरा असली प्रश्न: क्या पॉइंटर पर थोड़ा हेरफेर करने का कोई और सही तरीका है? मैंने सोचा था कि इस दृष्टिकोण को कुछ हद तक (पैकिंग एक शून्य * में बिट्स), लेकिन मैं गलत हो सकता है ...
मैं stdint.h – sambowry
uint64_t से uint64_t का उपयोग करता हूं यदि आपके प्लेटफ़ॉर्म में 64-बिट पॉइंटर्स से कम है तो बहुत बड़ा होगा। उसी शीर्षलेख से intptr_t और uintptr_t का उपयोग करें। – tgamblin
@sambowry - ऐसा लगता है कि आपको थोड़ा सा 'stdint.h' के माध्यम से जाने की आवश्यकता है। –