Administrator
Administrator
发布于 2025-09-15 / 10 阅读
0
0

简易实现string类SSO特性

short string optimization,短字符串优化,小于等于MaxStackSize长度的字符串存放在字符数组中(栈),超出则存储字符数组首地址(用new创建数组)

class MyString {
	static const size_t MaxStackSize = 15;
	union {
		char c1[MaxStackSize + 1]; //栈中开辟内存空间
		char* c2; //指针存放在栈中,字符串数据用new创建(存放在堆内存)
	};
	size_t len;
	size_t cap;
public:
	~MyString() {
		if (len > 15) {
			delete[] c2;
		}
	}
	MyString(const char* _c) {
		len = strlen(_c);
		if (len > 15) {
			cap = len + 8 + 1; // 容量大小=实际大小+8
			c2 = new char[cap];
			memcpy(c2, _c, len+1); // +1表示把NULL符也复制到c2
		}
		else {
			memset(c1, 0, MaxStackSize + 1);
			memcpy(c1, _c, len +1);
			cap = MaxStackSize;
		}
	}
	size_t length() const {
		return len;
	}
	size_t capacity() const {
		return cap;
	}
};


评论