2014-09-04 58 views
0

我有一箇舊的應用程序使用CString整個代碼。 寫入CString的字符串的最大大小是8,9個字符,但我注意到它分配更多。 (每個CString至少128字節)我可以限制MFC CString緩衝區的大小嗎

有沒有辦法限制CString緩衝區的大小。 Fox示例爲64字節?

由於提前,

+0

這真的是一個問題嗎? – 2014-09-11 17:37:23

+0

是的,如果你有1000萬對象,每個對象有4個CString對象。 – branero79 2014-09-14 16:13:30

回答

1

詳細地: CString的實現是內部的。您可以在CSimpleStringT :: PrepareWrite2和字符串管理器的重新分配函數中找到代碼。

PrepareWrite2分配緩衝區。如果之前沒有緩衝區,它會請求確切的大小。如果緩衝區發生變化。緩衝區是newLength * 1.5。

最後,請求被傳遞給字符串管理器的重新分配函數。最後,這個大小被傳遞給CRT函數realloc。

請記住,內存管理器本身再次決定什麼塊大小是「有效的」,並可能再次改變大小。所以我看到(在VS-2013/VS-2010中),你沒有機會改變塊大小。這項工作最終由realloc完成。甚至這個功能將其請求傳遞給HeapAlloc ...

+0

感謝您的回答。我將不得不重做代碼並替換CStrings。我做了一個額外的測試,我看到,當我在CString分配的緩衝區中放置3個字符是64字節。 – branero79 2014-09-06 05:31:49

+1

調試還是發佈?即使你更換它。最後,段由內部堆分配。該模塊控制64字節。我認爲這是最小的可分配塊。少會導致更多的碎片!我的提示:不要爲此擔心。關於這點以及多年的經驗有充分的理由。 – xMRi 2014-09-06 17:40:42