我有一个旧的应用程序使用CString整个代码。 写入CString的字符串的最大大小是8,9个字符,但我注意到它分配更多。 (每个CString至少128字节)我可以限制MFC CString缓冲区的大小吗
有没有办法限制CString缓冲区的大小。 Fox示例为64字节?
由于提前,
我有一个旧的应用程序使用CString整个代码。 写入CString的字符串的最大大小是8,9个字符,但我注意到它分配更多。 (每个CString至少128字节)我可以限制MFC CString缓冲区的大小吗
有没有办法限制CString缓冲区的大小。 Fox示例为64字节?
由于提前,
号
详细地: CString的实现是内部的。您可以在CSimpleStringT :: PrepareWrite2和字符串管理器的重新分配函数中找到代码。
PrepareWrite2分配缓冲区。如果之前没有缓冲区,它会请求确切的大小。如果缓冲区发生变化。缓冲区是newLength * 1.5。
最后,请求被传递给字符串管理器的重新分配函数。最后,这个大小被传递给CRT函数realloc。
请记住,内存管理器本身再次决定什么块大小是“有效的”,并可能再次改变大小。所以我看到(在VS-2013/VS-2010中),你没有机会改变块大小。这项工作最终由realloc完成。甚至这个功能将其请求传递给HeapAlloc ...
这真的是一个问题吗? – 2014-09-11 17:37:23
是的,如果你有1000万对象,每个对象有4个CString对象。 – branero79 2014-09-14 16:13:30