我可以限制MFC CString缓冲区的大小吗

我可以限制MFC CString缓冲区的大小吗,string,mfc,size,buffer,limit,String,Mfc,Size,Buffer,Limit,我有一个旧的应用程序,它使用CString完成代码。 写入CString的字符串的最大大小是8,9个字符,但我注意到它分配了更多的字符。(每个CString至少128字节) 有没有办法限制CString缓冲区的大小。Fox示例到64字节 提前谢谢,不 详细内容: CString实现是内部的。您可以在CSimpleStringT::PrepareWrite2和字符串管理器的重新分配函数中找到代码 PrepareWrite2分配缓冲区。如果之前没有缓冲区,它会请求确切的大小。如果缓冲区不可用,则更改

我有一个旧的应用程序,它使用CString完成代码。 写入CString的字符串的最大大小是8,9个字符,但我注意到它分配了更多的字符。(每个CString至少128字节)

有没有办法限制CString缓冲区的大小。Fox示例到64字节

提前谢谢,

详细内容: CString实现是内部的。您可以在CSimpleStringT::PrepareWrite2和字符串管理器的重新分配函数中找到代码

PrepareWrite2分配缓冲区。如果之前没有缓冲区,它会请求确切的大小。如果缓冲区不可用,则更改。缓冲区为newLength*1.5

最后,请求被传递给字符串管理器的重新分配函数。最后,这个大小被传递给CRT函数realloc

请记住,内存管理器本身再次决定什么块大小是“有效的”,并且可能再次更改大小


因此,正如我所看到的(在VS-2013/VS-2010中),您没有机会改变区块大小。这项工作最终由realloc完成。甚至这个函数也会将其请求传递给HeapAlloc…

谢谢您的回答。我将不得不重新编写代码并替换cstring。我做了一个额外的测试,当我在CString中放置3个字符时,分配的缓冲区是64字节。调试还是释放?即使你更换了它。最后,段由内部堆分配。这个模块控制64个字节。我认为这是最小的可分配块。更少会导致更多的碎片!我的小贴士:不要为此而思考和担心。关于这一点,有明确的原因,也有多年的经验。这真的是一个问题吗?是的,如果你有1000万个对象,每个对象有4个CString对象。