我有一个旧的应用程序,通过代码使用CString。 写入CString的字符串的最大大小是8,9个字符,但我注意到它分配了更多。 (每个CString至少128个字节)
有没有办法限制CString缓冲区的大小。 Fox的例子为64bytes?
提前致谢,
答案 0 :(得分:1)
没有。
详细说明: CString实现是内部的。您可以在CSimpleStringT :: PrepareWrite2和字符串管理器的Reallocate函数中找到代码。
PrepareWrite2分配缓冲区。如果之前没有缓冲区,则会请求确切的大小。如果缓冲区发生了变化。缓冲区是newLength * 1.5。
最后,请求被传递给字符串管理器的Reallocate函数。最后,这个大小被传递给CRT函数realloc。
请记住,内存管理器本身会再次决定哪些blocksize是“有效”的,并且可能会再次更改大小。
所以我看到(在VS-2013 / VS-2010中)你没有机会改变块大小。这项工作最终由realloc完成。甚至这个函数也将它的请求传递给HeapAlloc ......