{"id":118,"date":"2025-07-04T23:30:30","date_gmt":"2025-07-04T15:30:30","guid":{"rendered":"http:\/\/120.76.99.214\/?p=118"},"modified":"2025-11-24T16:42:24","modified_gmt":"2025-11-24T08:42:24","slug":"%e5%ae%9a%e9%95%bf%e5%86%85%e5%ad%98%e6%b1%a0","status":"publish","type":"post","link":"https:\/\/www.tgwttt.xyz\/?p=118","title":{"rendered":"\u5b9a\u957f\u5185\u5b58\u6c60"},"content":{"rendered":"\n<p>\u5185\u5b58\u6c60\u662f\u7528\u6765\u5b9e\u73b0\u5185\u5b58\u7684\u9ad8\u6548\u7ba1\u7406\uff0c\u7528\u4e8e\u66ff\u4ee3\u7cfb\u7edf\u5185\u5b58\u7ba1\u7406\u51fd\u6570\uff08malloc,free\uff09\u3002\u5185\u5b58\u6c60\u4e3b\u8981\u89e3\u51b3\u5185\u5b58\u7ba1\u7406\u4e2d\u7684\u4e24\u4e2a\u95ee\u9898\u5373\uff1a                                                                                                                                                         1.\u6548\u7387\u95ee\u9898\uff1a\u7cfb\u7edf\u9891\u7e41\u7684\u7533\u8bf7\u5185\u5b58\u6240\u5360\u636e\u7684\u65f6\u95f4\u635f\u8017\u5bf9\u7a0b\u5e8f\u95ee\u9898\u5e26\u6765\u7684\u5f71\u54cd\u3002                                                              2.\u5185\u5b58\u788e\u7247\u5316\u95ee\u9898\uff1a\u5982\u56fe\u6240\u793a\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"549\" src=\"http:\/\/120.76.99.214\/wp-content\/uploads\/2025\/07\/image-8-1024x549.png\" alt=\"\" class=\"wp-image-119\" srcset=\"https:\/\/www.tgwttt.xyz\/wp-content\/uploads\/2025\/07\/image-8-1024x549.png 1024w, https:\/\/www.tgwttt.xyz\/wp-content\/uploads\/2025\/07\/image-8-300x161.png 300w, https:\/\/www.tgwttt.xyz\/wp-content\/uploads\/2025\/07\/image-8-768x411.png 768w, https:\/\/www.tgwttt.xyz\/wp-content\/uploads\/2025\/07\/image-8.png 1232w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u5f53\u56fe\u4e2d\u7684\u4e24\u7247\u95ee\u9898\u4e0d\u8fde\u7eed\u65f6\uff0c\u6211\u4eec\u65e0\u6cd5\u5408\u7406\u7684\u5229\u7528\u7528\u7a7a\u95f4\uff0c\u5bfc\u81f4\u7a7a\u95f4\u7684\u6d6a\u8d39\u3002<\/p>\n\n\n\n<p>malloc\u51fd\u6570\uff1amalloc\u51fd\u6570\u672c\u8eab\u5c31\u662f\u4e00\u4e2a\u5185\u5b58\u6c60 \uff0c\u5b83\u76f8\u5f53\u4e0e\u4e00\u4e2a\u96f6\u552e\u5e97\uff0c\u5b83\u5411\u7a0b\u5e8f\u201c\u6279\u53d1\u201d\u4e86\u4e00\u5927\u5757\u5185\u5b58\uff0c\u6bcf\u5f53\u7a0b\u5e8f\u6709\u5927\u91cf\u5185\u5b58\u9700\u6c42\u7684\u65f6\u5019\uff0c\u5b83\u5c31\u5411\u64cd\u4f5c\u7cfb\u7edf\u8fdb\u8d27\uff0c\u7136\u540e\u5356\u7ed9\u7a0b\u5e8f\uff0c\u800c\u8fd9\u9700\u8981\u5927\u91cf\u65f6\u95f4\u3002\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u5199\u4e00\u4e2a\u6bd4\u8f83\u5feb\u7684\u5185\u5b58\u6c60\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"786\" height=\"458\" src=\"http:\/\/120.76.99.214\/wp-content\/uploads\/2025\/07\/image-9.png\" alt=\"\" class=\"wp-image-120\" srcset=\"https:\/\/www.tgwttt.xyz\/wp-content\/uploads\/2025\/07\/image-9.png 786w, https:\/\/www.tgwttt.xyz\/wp-content\/uploads\/2025\/07\/image-9-300x175.png 300w, https:\/\/www.tgwttt.xyz\/wp-content\/uploads\/2025\/07\/image-9-768x448.png 768w\" sizes=\"auto, (max-width: 786px) 100vw, 786px\" \/><\/figure>\n\n\n\n<p>\u6211\u5206\u4eab\u7684\u662f\u4e00\u4e2a\u5b9a\u957f\u5185\u5b58\u6c60\u4e0b\u9762\u662fc++\u4ee3\u7801\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#include <iostream>\n#include <vector>\n#include <time.h>\nusing std::cout;\nusing std::endl;\n\n#ifdef _WIN32\n#include<windows.h>\n#else\n\/\/ \n#endif\n\n\/\/ \u5b9a\u957f\u5185\u5b58\u6c60\n\/\/template<size_t N>\n\/\/class ObjectPool\n\/\/{};\n\n\/\/ \u76f4\u63a5\u53bb\u5806\u4e0a\u6309\u9875\u7533\u8bf7\u7a7a\u95f4\ninline static void* SystemAlloc(size_t kpage)\n{\n#ifdef _WIN32\n\tvoid* ptr = VirtualAlloc(0, kpage << 13, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);\n#else\n\t\/\/ linux\u4e0bbrk mmap\u7b49\n#endif\n\n\tif (ptr == nullptr)\n\t\tthrow std::bad_alloc();\n\n\treturn ptr;\n}\n\ntemplate<class T>\nclass ObjectPool\n{\npublic:\n\tT* New()\n\t{\n\t\tT* obj = nullptr;\n\n\t\t\/\/ \u4f18\u5148\u628a\u8fd8\u56de\u6765\u5185\u5b58\u5757\u5bf9\u8c61\uff0c\u518d\u6b21\u91cd\u590d\u5229\u7528\n\t\tif (_freeList)\n\t\t{\n\t\t\tvoid* next = *((void**)_freeList);\n\t\t\tobj = (T*)_freeList;\n\t\t\t_freeList = next;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t\/\/ \u5269\u4f59\u5185\u5b58\u4e0d\u591f\u4e00\u4e2a\u5bf9\u8c61\u5927\u5c0f\u65f6\uff0c\u5219\u91cd\u65b0\u5f00\u5927\u5757\u7a7a\u95f4\n\t\t\tif (_remainBytes < sizeof(T))\n\t\t\t{\n\t\t\t\t_remainBytes = 128 * 1024;\n\t\t\t\t\/\/_memory = (char*)malloc(_remainBytes);\n\t\t\t\t_memory = (char*)SystemAlloc(_remainBytes >> 13);\n\t\t\t\tif (_memory == nullptr)\n\t\t\t\t{\n\t\t\t\t\tthrow std::bad_alloc();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tobj = (T*)_memory;\n\t\t\tsize_t objSize = sizeof(T) < sizeof(void*) ? sizeof(void*) : sizeof(T);\n\t\t\t_memory += objSize;\n\t\t\t_remainBytes -= objSize;\n\t\t}\n\n\t\t\/\/ \u5b9a\u4f4dnew\uff0c\u663e\u793a\u8c03\u7528T\u7684\u6784\u9020\u51fd\u6570\u521d\u59cb\u5316\n\t\tnew(obj)T;\n\n\t\treturn obj;\n\t}\n\n\tvoid Delete(T* obj)\n\t{\n\t\t\/\/ \u663e\u793a\u8c03\u7528\u6790\u6784\u51fd\u6570\u6e05\u7406\u5bf9\u8c61\n\t\tobj->~T();\n\n\t\t\/\/ \u5934\u63d2\n\t\t*(void**)obj = _freeList;\n\t\t_freeList = obj;\n\t}\n\nprivate:\n\tchar* _memory = nullptr; \/\/ \u6307\u5411\u5927\u5757\u5185\u5b58\u7684\u6307\u9488\n\tsize_t _remainBytes = 0; \/\/ \u5927\u5757\u5185\u5b58\u5728\u5207\u5206\u8fc7\u7a0b\u4e2d\u5269\u4f59\u5b57\u8282\u6570\n\n\tvoid* _freeList = nullptr; \/\/ \u8fd8\u56de\u6765\u8fc7\u7a0b\u4e2d\u94fe\u63a5\u7684\u81ea\u7531\u94fe\u8868\u7684\u5934\u6307\u9488\n};\n\nstruct TreeNode\n{\n\tint _val;\n\tTreeNode* _left;\n\tTreeNode* _right;\n\n\tTreeNode()\n\t\t:_val(0)\n\t\t, _left(nullptr)\n\t\t, _right(nullptr)\n\t{\n\t}\n};\n\nvoid TestObjectPool()\n{\n\t\/\/ \u7533\u8bf7\u91ca\u653e\u7684\u8f6e\u6b21\n\tconst size_t Rounds = 5;\n\n\t\/\/ \u6bcf\u8f6e\u7533\u8bf7\u91ca\u653e\u591a\u5c11\u6b21\n\tconst size_t N = 100000;\n\n\tstd::vector<TreeNode*> v1;\n\tv1.reserve(N);\n\n\tsize_t begin1 = clock();\n\tfor (size_t j = 0; j < Rounds; ++j)\n\t{\n\t\tfor (int i = 0; i < N; ++i)\n\t\t{\n\t\t\tv1.push_back(new TreeNode);\n\t\t}\n\t\tfor (int i = 0; i < N; ++i)\n\t\t{\n\t\t\tdelete v1[i];\n\t\t}\n\t\tv1.clear();\n\t}\n\n\tsize_t end1 = clock();\n\n\tstd::vector<TreeNode*> v2;\n\tv2.reserve(N);\n\n\tObjectPool<TreeNode> TNPool;\n\tsize_t begin2 = clock();\n\tfor (size_t j = 0; j < Rounds; ++j)\n\t{\n\t\tfor (int i = 0; i < N; ++i)\n\t\t{\n\t\t\tv2.push_back(TNPool.New());\n\t\t}\n\t\tfor (int i = 0; i < N; ++i)\n\t\t{\n\t\t\tTNPool.Delete(v2[i]);\n\t\t}\n\t\tv2.clear();\n\t}\n\tsize_t end2 = clock();\n\n\tcout << \"new cost time:\" << end1 - begin1 << endl;\n\tcout << \"object pool cost time:\" << end2 - begin2 << endl;\n}\n<\/code><\/pre>\n\n\n\n<p>\u6211\u4eec\u4f7f\u7528main\u51fd\u6570\u6d4b\u8bd5\u4e00\u4e0b\u7a0b\u5e8f\uff0c\u6bd4\u8f83\u901f\u5ea6\uff0c\u6d4b\u8bd5\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"323\" height=\"61\" src=\"http:\/\/120.76.99.214\/wp-content\/uploads\/2025\/07\/image-10.png\" alt=\"\" class=\"wp-image-121\" srcset=\"https:\/\/www.tgwttt.xyz\/wp-content\/uploads\/2025\/07\/image-10.png 323w, https:\/\/www.tgwttt.xyz\/wp-content\/uploads\/2025\/07\/image-10-300x57.png 300w\" sizes=\"auto, (max-width: 323px) 100vw, 323px\" \/><\/figure>\n\n\n\n<p>\u6839\u636e\u7ed3\u679c\u663e\u793anew\u7684\u65f6\u95f4\u662f\u8fdc\u8fdc\u5927\u4e8eobject pool\u7684\u3002<\/p>\n\n\n\n<p>\u4eca\u5929\u7684\u66f4\u65b0\u5c31\u5230\u8fd9\u91cc\u4e86\uff0c\u5982\u6709\u9519\u8bef\uff0c\u8bf7\u4e88\u4ee5\u6307\u51fa\uff0c\u8c22\u8c22\uff01\uff01\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5185\u5b58\u6c60\u662f\u7528\u6765\u5b9e\u73b0\u5185\u5b58\u7684\u9ad8\u6548\u7ba1\u7406\uff0c\u7528\u4e8e\u66ff\u4ee3\u7cfb\u7edf\u5185\u5b58\u7ba1\u7406\u51fd\u6570\uff08malloc,free\uff09\u3002\u5185\u5b58\u6c60\u4e3b\u8981\u89e3\u51b3\u5185\u5b58\u7ba1\u7406\u4e2d\u7684&#8230;<\/p>\n","protected":false},"author":1,"featured_media":119,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[4],"tags":[],"class_list":["post-118","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c"],"_links":{"self":[{"href":"https:\/\/www.tgwttt.xyz\/index.php?rest_route=\/wp\/v2\/posts\/118","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tgwttt.xyz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tgwttt.xyz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tgwttt.xyz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tgwttt.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=118"}],"version-history":[{"count":4,"href":"https:\/\/www.tgwttt.xyz\/index.php?rest_route=\/wp\/v2\/posts\/118\/revisions"}],"predecessor-version":[{"id":882,"href":"https:\/\/www.tgwttt.xyz\/index.php?rest_route=\/wp\/v2\/posts\/118\/revisions\/882"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tgwttt.xyz\/index.php?rest_route=\/wp\/v2\/media\/119"}],"wp:attachment":[{"href":"https:\/\/www.tgwttt.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tgwttt.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tgwttt.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}