6
A
回答
8
默認情況下,分配給std::string
內存動態分配。
請注意std::string
有一個max_size()
函數返回實現支持的最大字符數。但是,這樣做的有用性值得懷疑,因爲它是最大的實現,並沒有考慮其他資源,如內存。你真正的限制要低得多。 (嘗試連續內存分配4GB,或考慮到內存耗盡別處。)
2
甲std::string
對象將同樣的方式被分配一個int
或任何其它類型必須是:上,如果它是一個局部變量,或它的堆可能是static
,或在哪裏X
包含string
等如果使用new std::string
堆或new X
..
但是,這std::string
對象可含有至少一個指針,指向由與basic_string的<分配器提供額外的存儲器>被實例化 - 爲std::string
typedef
這意味着堆分配內存。無論是直接在原來的std::string
對象存儲或指向的堆,你可以期望找到:
- 字符串大小成員,
- 可能引用計數器或鏈接的一些方式,
- 文本數據串店(如果有的話)
一些std::string
實現具有「短字符串」的優化,他們包的只有幾個字符的字符串直接到字符串對象本身(記憶效率,經常使用某種聯盟與當字符串更長時用於其他目的的字段)。但是,對於其他字符串實現,甚至對於那些在處理字符串過長而不能直接適用std :: string對象時進行短字符串優化的用戶,他們將不得不遵循對存儲的文本數據的指針/引用在分配器提供的(堆)內存中。
相關問題
- 1. 堆棧指針是長大還是長小?
- 2. iphone os支持的最大堆大小和堆棧大小是多少?
- 3. 達到的最大堆棧大小
- 4. 增加堆棧大小c#
- 5. Linux堆棧大小
- 6. Android堆棧大小
- 7. 最大堆棧大小使用
- 8. 最大調用堆棧大小
- 9. 如何找到最大堆棧大小?
- 10. java集最大堆棧大小
- 11. 最大堆棧大小超過
- 12. 最大線程堆棧大小.NET?
- 13. 內核如何決定堆棧大小
- 14. Hotspot JVM的「Xss」選項是否將固定的「初始堆棧大小」或堆棧可以增長到的「最大堆棧大小」設置爲?
- 15. 堆棧= java.lang.StackOverflowError的:堆棧大小8MB
- 16. 固定大小堆棧Java
- 17. Nexus的最大堆大小?
- 18. Tomcat7堆棧大小很小
- 19. 建議設置最大堆大小還是不是?
- 20. Java的堆棧分配的大小是物理還是邏輯?
- 21. 堆棧大小的最大使用限制是否有限制?
- 22. 堆棧上聲明的最大允許大小是多少?
- 23. FreeRTOS STM32鏈接器堆棧大小vs任務堆棧大小
- 24. 堆排序,最小堆使用還是最大?
- 25. 最大堆大小無效
- 26. MSP430上的C程序所需的最大堆棧大小
- 27. 是否可以刪除最大調用堆棧大小?
- 28. 長輪詢導致最大調用堆棧大小超出
- 29. 在C(gcc)中函數堆棧的最大大小
- 30. 陣營路由器,最大調用堆棧大小超過
啊,我認爲這將是堆棧限制,因爲它看起來像任何其他本地變種。我想任何std ::對象被分配在堆中? – eugene 2011-04-08 06:35:27
@Eugene:不,myVar是堆棧分配的,但它擁有一個內部緩衝區來存儲堆分配的字符串(一般情況下)。 std容器通常需要一個負責分配資源的'Allocator'參數,並且通常在堆上進行分配,儘管它(理論上)可以在堆棧上分配。 – 2011-04-08 06:37:52
@Eugene它依賴,但對於容器,是的,數據通常在堆中。你總是可以將一個分配器拼湊成「使用」堆棧(bleh)。 – Anycorn 2011-04-08 06:39:17