{"id":5203,"date":"2025-06-11T12:42:28","date_gmt":"2025-06-11T04:42:28","guid":{"rendered":"https:\/\/www.diggoodbox.com\/blog\/?p=5203"},"modified":"2025-06-11T12:42:28","modified_gmt":"2025-06-11T04:42:28","slug":"%e7%8e%b0%e4%bb%a3-c-%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e6%96%b9%e6%b3%95%ef%bc%88modern-c-memory-management-summary%ef%bc%89","status":"publish","type":"post","link":"https:\/\/www.diggoodbox.com\/blog\/?p=5203","title":{"rendered":"\u73b0\u4ee3 C++ \u5185\u5b58\u7ba1\u7406\u65b9\u6cd5\uff08Modern C++ Memory Management Summary\uff09"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\"><strong>\u73b0\u4ee3 C++ \u5185\u5b58\u7ba1\u7406\u65b9\u6cd5 Modern C++ Memory Management Summary<\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>\u4e2d\u6587<\/strong><\/td><td><strong>English<\/strong><\/td><\/tr><tr><td><strong>1. \u4f20\u7edf\u624b\u52a8\u5185\u5b58\u7ba1\u7406\uff08C++98\/03\uff09<\/strong><\/td><td><strong>1. Manual Memory Management (C++98\/03)<\/strong><\/td><\/tr><tr><td>&#8211; \u4f7f\u7528 new \u548c delete \u663e\u5f0f\u5206\u914d\u548c\u91ca\u653e\u5185\u5b58\u3002<\/td><td>&#8211; Explicitly allocate and free memory with new and delete.<\/td><\/tr><tr><td>&#8211; \u5bb9\u6613\u51fa\u73b0\u5185\u5b58\u6cc4\u6f0f\u3001\u60ac\u7a7a\u6307\u9488\u7b49\u95ee\u9898\u3002<\/td><td>&#8211; Prone to memory leaks and dangling pointers.<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><strong>2. \u667a\u80fd\u6307\u9488\uff08C++11 \u8d77\uff09<\/strong><\/td><td><strong>2. Smart Pointers (Since C++11)<\/strong><\/td><\/tr><tr><td>&#8211; \u5f15\u5165 &lt;memory&gt;\uff0c\u63d0\u4f9bstd::unique_ptr\u3001std::shared_ptr\u548cstd::weak_ptr\u3002<\/td><td>&#8211; Introduced &lt;memory&gt; with std::unique_ptr, std::shared_ptr, and std::weak_ptr.<\/td><\/tr><tr><td>&#8211; \u81ea\u52a8\u7ba1\u7406\u5185\u5b58\uff0c\u9632\u6b62\u6cc4\u6f0f\uff0c\u652f\u6301\u6240\u6709\u6743\u8bed\u4e49\u3002<\/td><td>&#8211; Automatic memory management, ownership semantics, prevents leaks.<\/td><\/tr><tr><td>&#8211; unique_ptr \u72ec\u5360\u6240\u6709\u6743\uff0c\u4e0d\u80fd\u590d\u5236\u53ea\u652f\u6301\u79fb\u52a8\u3002<\/td><td>&#8211; unique_ptr has exclusive ownership, non-copyable but movable.<\/td><\/tr><tr><td>&#8211; shared_ptr \u652f\u6301\u5f15\u7528\u8ba1\u6570\u5171\u4eab\u6240\u6709\u6743\u3002<\/td><td>&#8211; shared_ptr supports shared ownership via reference counting.<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><strong>3. \u81ea\u52a8\u7c7b\u578b\u63a8\u65ad\uff08C++11 \u8d77\uff09<\/strong><\/td><td><strong>3. Auto Type Deduction (Since C++11)<\/strong><\/td><\/tr><tr><td>&#8211; \u4f7f\u7528 auto \u7b80\u5316\u667a\u80fd\u6307\u9488\u58f0\u660e\u3002<\/td><td>&#8211; Use auto to simplify smart pointer declarations.<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><strong>4. \u53f3\u503c\u5f15\u7528\u4e0e\u79fb\u52a8\u8bed\u4e49\uff08C++11\uff09<\/strong><\/td><td><strong>4. Rvalue References and Move Semantics (C++11)<\/strong><\/td><\/tr><tr><td>&#8211; \u79fb\u52a8\u6784\u9020\u548c\u79fb\u52a8\u8d4b\u503c\u51cf\u5c11\u4e0d\u5fc5\u8981\u62f7\u8d1d\uff0c\u63d0\u9ad8\u6027\u80fd\u3002<\/td><td>&#8211; Move constructors and assignments reduce unnecessary copies, improve performance.<\/td><\/tr><tr><td>&#8211; \u667a\u80fd\u6307\u9488\u652f\u6301\u6240\u6709\u6743\u79fb\u52a8\uff0c\u5982std::move\u3002<\/td><td>&#8211; Smart pointers support ownership transfer with std::move.<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><strong>5. \u5185\u5b58\u5bf9\u9f50\u4e0e\u5bf9\u9f50\u5206\u914d\uff08C++17\uff09<\/strong><\/td><td><strong>5. Memory Alignment and Aligned Allocation (C++17)<\/strong><\/td><\/tr><tr><td>&#8211; \u652f\u6301\u81ea\u5b9a\u4e49\u5bf9\u9f50\uff0c\u63d0\u5347\u6027\u80fd\uff0c\u9002\u7528SIMD\u7b49\u573a\u666f\u3002<\/td><td>&#8211; Support custom alignment, improve performance, useful for SIMD and low-level code.<\/td><\/tr><tr><td>&#8211; \u51fd\u6570\u5982 std::aligned_alloc\u3002<\/td><td>&#8211; Functions like std::aligned_alloc.<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><strong>6. \u591a\u6001\u5185\u5b58\u8d44\u6e90\u7ba1\u7406\uff08C++17\uff09<\/strong><\/td><td><strong>6. Polymorphic Memory Resource (PMR) (C++17)<\/strong><\/td><\/tr><tr><td>&#8211; \u901a\u8fc7 std::pmr \u63d0\u4f9b\u53ef\u5b9a\u5236\u7684\u5185\u5b58\u8d44\u6e90\u548c\u5206\u914d\u5668\uff0c\u4f18\u5316\u6027\u80fd\u3002<\/td><td>&#8211; Provides customizable memory resources and allocators via std::pmr to optimize performance.<\/td><\/tr><tr><td><\/td><td><\/td><\/tr><tr><td><strong>7. C++20\u53ca\u4ee5\u540e\u5185\u5b58\u6a21\u578b\u4e0e\u539f\u5b50\u64cd\u4f5c\u4f18\u5316<\/strong><\/td><td><strong>7. Memory Model and Atomic Operation Improvements (C++20 and beyond)<\/strong><\/td><\/tr><tr><td>&#8211; \u63d0\u5347\u5e76\u53d1\u5185\u5b58\u7ba1\u7406\u6548\u7387\u548c\u5b89\u5168\u6027\u3002<\/td><td>&#8211; Enhances efficiency and safety of concurrent memory management.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u793a\u4f8b\u4ee3\u7801 Examples<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u667a\u80fd\u6307\u9488\u793a\u4f8b Smart Pointer Example<\/strong><\/h3>\n\n\n\n<p>#include &lt;memory&gt;<\/p>\n\n\n\n<p>auto p1 = std::make_unique&lt;int&gt;(42);&nbsp; &nbsp; &nbsp; &nbsp; \/\/ unique_ptr \u72ec\u5360\u6240\u6709\u6743 Exclusive ownership<\/p>\n\n\n\n<p>auto p2 = std::make_shared&lt;int&gt;(100); &nbsp; &nbsp; &nbsp; \/\/ shared_ptr \u5f15\u7528\u8ba1\u6570 Shared ownership<\/p>\n\n\n\n<p>auto p3 = std::move(p1); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ \u6240\u6709\u6743\u8f6c\u79fb Ownership transfer<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u5bf9\u9f50\u5206\u914d\u793a\u4f8b Aligned Allocation Example<\/strong><\/h3>\n\n\n\n<p>#include &lt;cstdlib&gt;<\/p>\n\n\n\n<p>void* ptr = std::aligned_alloc(64, 1024); &nbsp; \/\/ 64 \u5b57\u8282\u5bf9\u9f50\uff0c\u5206\u914d1024\u5b57\u8282 Allocate 1024 bytes aligned to 64 bytes<\/p>\n\n\n\n<p>std::free(ptr);<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>PMR\u793a\u4f8b PMR Example<\/strong><\/h3>\n\n\n\n<p>#include &lt;memory_resource&gt;<\/p>\n\n\n\n<p>#include &lt;vector&gt;<\/p>\n\n\n\n<p>std::pmr::monotonic_buffer_resource pool;<\/p>\n\n\n\n<p>std::pmr::vector&lt;int&gt; vec(&amp;pool);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ \u4f7f\u7528\u81ea\u5b9a\u4e49\u5185\u5b58\u8d44\u6e90 Use custom memory resource<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u6587\u603b\u7ed3\u73b0\u4ee3C++\u5185\u5b58\u7ba1\u7406\u65b9\u6cd5\uff0c\u5305\u62ec\u667a\u80fd\u6307\u9488\u3001\u7c7b\u578b\u63a8\u65ad\u3001\u5f15\u7528\u3001\u5185\u5b58\u5bf9\u9f50\u3001\u591a\u6001\u5185\u5b58\u7ba1\u7406\u7b49\u5185\u5bb9\u3002<\/p>\n","protected":false},"author":1,"featured_media":5194,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[17],"tags":[20,26,27,21,22],"class_list":["post-5203","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology","tag-c","tag-26","tag-27","tag-21","tag-22"],"_links":{"self":[{"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5203"}],"version-history":[{"count":1,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5203\/revisions"}],"predecessor-version":[{"id":5204,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5203\/revisions\/5204"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=\/wp\/v2\/media\/5194"}],"wp:attachment":[{"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.diggoodbox.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}