溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中如何使用聯(lián)合體節(jié)約內(nèi)存

發(fā)布時間:2021-07-30 16:14:33 來源:億速云 閱讀:180 作者:Leah 欄目:大數(shù)據(jù)

這期內(nèi)容當中小編將會給大家?guī)碛嘘PC++中如何使用聯(lián)合體節(jié)約內(nèi)存,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Reason(原因)

A union allows a single piece of memory to be used for different types of objects at different times. Consequently, it can be used to save memory when we have several objects that are never used at the same time.

聯(lián)合體使用同一塊內(nèi)存管理在存在于不同時刻的不同類型的對象。也就是說,當不同的對象永遠不會同時使用的時候,使用聯(lián)合體可以節(jié)約內(nèi)存。

Example(示例)

union Value {
   int x;
   double d;
};

Value v = { 123 };  // now v holds an int
cout << v.x << '\n';    // write 123
v.d = 987.654;  // now v holds a double
cout << v.d << '\n';    // write 987.654

But heed the warning: Avoid "naked" unions。

但是要留意這條準則:C.181:避免原始的聯(lián)合體。

Example(示例)

// Short-string optimization

constexpr size_t buffer_size = 16; // Slightly larger than the size of a pointer

class Immutable_string {
public:
   Immutable_string(const char* str) :
       size(strlen(str))
   {
       if (size < buffer_size)
           strcpy_s(string_buffer, buffer_size, str);
       else {
           string_ptr = new char[size + 1];
           strcpy_s(string_ptr, size + 1, str);
       }
   }

   ~Immutable_string()
   {
       if (size >= buffer_size)
           delete string_ptr;
   }

   const char* get_str() const
   {
       return (size < buffer_size) ? string_buffer : string_ptr;
   }

private:
   // If the string is short enough, we store the string itself
   // instead of a pointer to the string.
   union {
       char* string_ptr;
       char string_buffer[buffer_size];
   };

   const size_t size;
};

上述就是小編為大家分享的C++中如何使用聯(lián)合體節(jié)約內(nèi)存了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI