{"id":1668,"date":"2025-03-24T08:50:11","date_gmt":"2025-03-23T23:50:11","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1668"},"modified":"2025-03-24T08:50:11","modified_gmt":"2025-03-23T23:50:11","slug":"%e3%80%90%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%e3%80%91valgrind%e3%81%a7%e5%ae%9f%e7%8f%be%e3%81%99%e3%82%8b%e3%83%a1%e3%83%a2%e3%83%aa%e3%83%aa%e3%83%bc%e3%82%af%e6%a4%9c%e5%87%ba%e3%81%a8","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1668","title":{"rendered":"\u3010\u5b8c\u5168\u30ac\u30a4\u30c9\u3011Valgrind\u3067\u5b9f\u73fe\u3059\u308b\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u691c\u51fa\u3068\u6700\u9069\u5316 &#8211; \u73fe\u5834\u3067\u4f7f\u3048\u308b7\u3064\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">Valgrind\u3068\u306f? \u2013 \u30e1\u30e2\u30ea\u89e3\u6790\u306e\u5f37\u529b\u306a\u30c4\u30fc\u30eb<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">C++\u958b\u767a\u8005\u306b\u5411\u3051\u305f\u30e1\u30e2\u30ea\u7ba1\u7406\u30c4\u30fc\u30eb<\/a>      <\/li>      <li>        <a href=\"#i-2\">Valgrind\u304c\u89e3\u6c7a\u3059\u308b3\u3064\u306e\u91cd\u8981\u306a\u554f\u984c<\/a>      <\/li>      <li>        <a href=\"#i-6\">Valgrind\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-7\">\u958b\u767a\u30d5\u30ed\u30fc\u306b\u304a\u3051\u308bValgrind\u306e\u4f4d\u7f6e\u3065\u3051<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-8\">Valgrind\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u57fa\u672c\u8a2d\u5b9a<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-9\">\u5404OS\u5225\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u521d\u671f\u8a2d\u5b9a\u3067\u304a\u3055\u3048\u3066\u304a\u304d\u305f\u3044\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-20\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u691c\u51fa\u306e\u5b9f\u8df5\u7684\u306a\u624b\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-21\">Memcheck\u30c4\u30fc\u30eb\u306e\u52b9\u679c\u7684\u306a\u4f7f\u3044\u65b9<\/a>      <\/li>      <li>        <a href=\"#i-24\">\u3088\u304f\u3042\u308b\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u30d1\u30bf\u30fc\u30f3\u3068\u5bfe\u51e6\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-28\">\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u8ce2\u3044\u89e3\u6790\u3068\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-32\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-33\">Callgrind\u3092\u4f7f\u7528\u3057\u305f\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u7279\u5b9a<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-36\">\u30ad\u30e3\u30c3\u30b7\u30e5\u4f7f\u7528\u7387\u306e\u5206\u6790\u3068\u6539\u5584\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-42\">\u5b9f\u8df5\u7684\u306aValgrind\u30b3\u30de\u30f3\u30c9\u30aa\u30d7\u30b7\u30e7\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-43\">\u8ab2\u984c\u5225\u304a\u3059\u3059\u3081\u30aa\u30d7\u30b7\u30e7\u30f3\u8a2d\u5b9a<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-48\">\u51fa\u529b\u7d50\u679c\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3068\u30ed\u30b0\u89e3\u6790<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-54\">CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3067\u306eValgrind\u6d3b\u7528\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-55\">\u81ea\u52d5\u30c6\u30b9\u30c8\u3078\u306e\u7d44\u307f\u8fbc\u307f\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-58\">Jenkins\/GitLab CI\u3067\u306e\u5b9f\u8df5\u7684\u306a\u8a2d\u5b9a\u4f8b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-64\">Valgrind\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-65\">\u3088\u304f\u3042\u308b\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-69\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3078\u306e\u5bfe\u51e6<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-75\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\uff1a\u3055\u3089\u306b\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a\u306b\u5411\u3051\u3066<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-76\">\u4ed6\u306e\u30e1\u30e2\u30ea\u89e3\u6790\u30c4\u30fc\u30eb\u306e\u6709\u7528\u6027<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-80\">\u7d99\u7d9a\u7684\u306a\u30b3\u30fc\u30c9\u54c1\u8cea\u5411\u4e0a\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Valgrind\u3068\u306f? \u2013 \u30e1\u30e2\u30ea\u89e3\u6790\u306e\u5f37\u529b\u306a\u30c4\u30fc\u30eb<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">C++\u958b\u767a\u8005\u306b\u5411\u3051\u305f\u30e1\u30e2\u30ea\u7ba1\u7406\u30c4\u30fc\u30eb<\/h3>\n\n\n\n<p>Valgrind\u306f\u3001C\/C++\u958b\u767a\u8005\u306b\u3068\u3063\u3066\u5fc5\u9808\u3068\u3082\u8a00\u3048\u308b\u30e1\u30e2\u30ea\u89e3\u6790\u304a\u3088\u3073\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u30c4\u30fc\u30eb\u3067\u3059\u30022000\u5e74\u4ee3\u521d\u982d\u306bJulian Seward\u306b\u3088\u3063\u3066\u958b\u767a\u304c\u59cb\u307e\u308a\u3001\u73fe\u5728\u3067\u306f\u591a\u304f\u306e\u958b\u767a\u73fe\u5834\u3067\u6a19\u6e96\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb\u3068\u3057\u3066\u63a1\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>Valgrind\u306e\u6700\u5927\u306e\u7279\u5fb4\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\u6642\u306b\u30e1\u30e2\u30ea\u95a2\u9023\u306e\u554f\u984c\u3092\u52d5\u7684\u306b\u691c\u51fa\u3067\u304d\u308b\u70b9\u3067\u3059\u3002\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u306f\u767a\u898b\u3067\u304d\u306a\u3044\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u554f\u984c\u3092\u5b9f\u884c\u6642\u306b\u7279\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af<\/li>\n\n\n\n<li>\u672a\u521d\u671f\u5316\u30e1\u30e2\u30ea\u3078\u306e\u30a2\u30af\u30bb\u30b9<\/li>\n\n\n\n<li>\u89e3\u653e\u6e08\u307f\u30e1\u30e2\u30ea\u3078\u306e\u30a2\u30af\u30bb\u30b9<\/li>\n\n\n\n<li>\u4e0d\u6b63\u306a\u30e1\u30e2\u30ea\u9818\u57df\u3078\u306e\u8aad\u307f\u66f8\u304d<\/li>\n\n\n\n<li>\u30b9\u30bf\u30c3\u30af\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">Valgrind\u304c\u89e3\u6c7a\u3059\u308b3\u3064\u306e\u91cd\u8981\u306a\u554f\u984c<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-3\">1. \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u691c\u51fa\u3068\u9632\u6b62<\/h4>\n\n\n\n<p>C++\u958b\u767a\u306b\u304a\u3051\u308b\u6700\u3082\u4e00\u822c\u7684\u306a\u554f\u984c\u306e\u4e00\u3064\u304c\u3001\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3067\u3059\u3002Valgrind\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b1\u30fc\u30b9\u3092\u6b63\u78ba\u306b\u691c\u51fa\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u4f8b\nvoid leakExample() {\n    int* ptr = new int[100];  \/\/ \u30e1\u30e2\u30ea\u78ba\u4fdd\n    ptr[0] = 1;  \/\/ \u4f7f\u7528\n    \/\/ delete\u3092\u5fd8\u308c\u3066\u3044\u308b -&gt; \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306a\u554f\u984c\u3092\u3001Valgrind\u306f\u5b9f\u884c\u6642\u306b\u691c\u51fa\u3057\u3001\u8a73\u7d30\u306a\u30ec\u30dd\u30fc\u30c8\u3092\u751f\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-4\">2. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u7279\u5b9a<\/h4>\n\n\n\n<p>Callgrind\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u554f\u984c\u3092\u7279\u5b9a\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u95a2\u6570\u547c\u3073\u51fa\u3057\u306e\u968e\u5c64\u69cb\u9020<\/li>\n\n\n\n<li>CPU\u547d\u4ee4\u5b9f\u884c\u56de\u6570<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u30df\u30b9\u306e\u767a\u751f\u7b87\u6240<\/li>\n\n\n\n<li>\u51e6\u7406\u6642\u9593\u306e\u9577\u3044\u95a2\u6570\u306e\u7279\u5b9a<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-5\">3. \u672a\u5b9a\u7fa9\u52d5\u4f5c\u306e\u691c\u51fa<\/h4>\n\n\n\n<p>\u672a\u521d\u671f\u5316\u5909\u6570\u306e\u4f7f\u7528\u3084\u30d0\u30c3\u30d5\u30a1\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc\u306a\u3069\u3001C++\u3067\u3088\u304f\u898b\u3089\u308c\u308b\u672a\u5b9a\u7fa9\u52d5\u4f5c\u3092\u691c\u51fa\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u672a\u521d\u671f\u5316\u5909\u6570\u306e\u4f7f\u7528\u4f8b\nvoid uninitializedExample() {\n    int value;  \/\/ \u521d\u671f\u5316\u3057\u3066\u3044\u306a\u3044\n    if (value &gt; 0) {  \/\/ \u672a\u521d\u671f\u5316\u5909\u6570\u3092\u4f7f\u7528 -&gt; Valgrind\u304c\u691c\u51fa\n        \/\/ \u51e6\u7406\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">Valgrind\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/h3>\n\n\n\n<p>Valgrind\u306f\u8907\u6570\u306e\u30c4\u30fc\u30eb\u3092\u7d71\u5408\u3057\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-5bce144b-64ae-4512-b64d-1eb99633a37b\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30c4\u30fc\u30eb\u540d<\/th><th>\u4e3b\u306a\u7528\u9014<\/th><th>\u7279\u5fb4<\/th><\/tr><\/thead><tbody><tr><td>Memcheck<\/td><td>\u30e1\u30e2\u30ea\u30a8\u30e9\u30fc\u691c\u51fa<\/td><td>\u6700\u3082\u983b\u7e41\u306b\u4f7f\u7528\u3055\u308c\u308b\u30c4\u30fc\u30eb<\/td><\/tr><tr><td>Callgrind<\/td><td>\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0<\/td><td>\u95a2\u6570\u547c\u3073\u51fa\u3057\u30b0\u30e9\u30d5\u306e\u751f\u6210<\/td><\/tr><tr><td>Cachegrind<\/td><td>\u30ad\u30e3\u30c3\u30b7\u30e5\u5206\u6790<\/td><td>CPU\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3<\/td><\/tr><tr><td>Helgrind<\/td><td>\u30b9\u30ec\u30c3\u30c9\u554f\u984c\u691c\u51fa<\/td><td>\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u306a\u3069\u306e\u691c\u51fa<\/td><\/tr><tr><td>Massif<\/td><td>\u30d2\u30fc\u30d7\u89e3\u6790<\/td><td>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u8a73\u7d30\u5206\u6790<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u958b\u767a\u30d5\u30ed\u30fc\u306b\u304a\u3051\u308bValgrind\u306e\u4f4d\u7f6e\u3065\u3051<\/h3>\n\n\n\n<p>Valgrind\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u958b\u767a\u30b5\u30a4\u30af\u30eb\u306e\u5404\u6bb5\u968e\u3067\u6d3b\u7528\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u958b\u767a\u6642<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u65b0\u6a5f\u80fd\u5b9f\u88c5\u6642\u306e\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u30c1\u30a7\u30c3\u30af<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u6307\u91dd\u53d6\u5f97<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30c6\u30b9\u30c8\u30d5\u30a7\u30fc\u30ba<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u81ea\u52d5\u30c6\u30b9\u30c8\u5b9f\u884c\u6642\u306e\u30e1\u30e2\u30ea\u30c1\u30a7\u30c3\u30af<\/li>\n\n\n\n<li>\u7d50\u5408\u30c6\u30b9\u30c8\u6642\u306e\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u72b6\u6cc1\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4fdd\u5b88\u30d5\u30a7\u30fc\u30ba<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u65e2\u5b58\u30b3\u30fc\u30c9\u306e\u54c1\u8cea\u6539\u5584<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u52a3\u5316\u306e\u691c\u51fa<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001Valgrind\u306f\u958b\u767a\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u5168\u4f53\u3092\u901a\u3058\u3066\u3001\u30b3\u30fc\u30c9\u306e\u54c1\u8cea\u7dad\u6301\u3068\u6539\u5584\u306b\u8ca2\u732e\u3059\u308b\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u969b\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u3068\u57fa\u672c\u7684\u306a\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-8\">Valgrind\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u57fa\u672c\u8a2d\u5b9a<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u5404OS\u5225\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-10\">Linux\uff08Ubuntu\/Debian\uff09<\/h4>\n\n\n\n<p>\u6700\u3082\u4e00\u822c\u7684\u306a\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u306f\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u3092\u4f7f\u7528\u3059\u308b\u65b9\u6cd5\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nsudo apt update\nsudo apt install valgrind\n\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\nvalgrind --version<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-11\">Linux\uff08RHEL\/CentOS\/Fedora\uff09<\/h4>\n\n\n\n<p>Red Hat\u7cfb\u5217\u306e\u30c7\u30a3\u30b9\u30c8\u30ea\u30d3\u30e5\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nsudo yum install valgrind  # CentOS\/RHEL\n# \u307e\u305f\u306f\nsudo dnf install valgrind  # Fedora\n\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\nvalgrind --version<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-12\">macOS<\/h4>\n\n\n\n<p>macOS\u3067\u306fHomebrew\u3092\u4f7f\u7528\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306e\u304c\u6700\u3082\u7c21\u5358\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Homebrew\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff08\u672a\u5c0e\u5165\u306e\u5834\u5408\uff09\n\/bin\/bash -c \"$(curl -fsSL https:\/\/raw.githubusercontent.com\/Homebrew\/install\/HEAD\/install.sh)\"\n\n# Valgrind\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nbrew install valgrind\n\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\nvalgrind --version<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-13\">\u30bd\u30fc\u30b9\u304b\u3089\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff08\u5168\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5171\u901a\uff09<\/h4>\n\n\n\n<p>\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u305f\u3044\u5834\u5408\u3084\u3001\u7279\u5b9a\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u3001\u30bd\u30fc\u30b9\u304b\u3089\u30d3\u30eb\u30c9\u3059\u308b\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5fc5\u8981\u306a\u30d3\u30eb\u30c9\u30c4\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nsudo apt install build-essential  # Debian\/Ubuntu\n# \u307e\u305f\u306f\nsudo yum groupinstall \"Development Tools\"  # RHEL\/CentOS\n\n# \u30bd\u30fc\u30b9\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3068\u5c55\u958b\nwget https:\/\/sourceware.org\/pub\/valgrind\/valgrind-3.21.0.tar.bz2\ntar -xjf valgrind-3.21.0.tar.bz2\ncd valgrind-3.21.0\n\n# \u30d3\u30eb\u30c9\u3068\u8a2d\u5b9a\n.\/configure\nmake\nsudo make install<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u521d\u671f\u8a2d\u5b9a\u3067\u304a\u3055\u3048\u3066\u304a\u304d\u305f\u3044\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">1. \u57fa\u672c\u7684\u306a\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb<\/h4>\n\n\n\n<p>Valgrind\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\u4ee5\u4e0b\u306e\u5834\u6240\u306b\u914d\u7f6e\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b7\u30b9\u30c6\u30e0\u5168\u4f53\u306e\u8a2d\u5b9a\n\/etc\/valgrind.conf\n\n# \u30e6\u30fc\u30b6\u30fc\u56fa\u6709\u306e\u8a2d\u5b9a\n~\/.valgrindrc<\/pre>\n\n\n\n<p>\u63a8\u5968\u3055\u308c\u308b\u57fa\u672c\u8a2d\u5b9a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># ~\/.valgrindrc \u306e\u8a2d\u5b9a\u4f8b\n--leak-check=full\n--show-leak-kinds=all\n--track-origins=yes\n--verbose\n--log-file=valgrind-%p.log<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-16\">2. \u30c7\u30d0\u30c3\u30b0\u30b7\u30f3\u30dc\u30eb\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<p>\u52b9\u679c\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u306e\u305f\u3081\u306b\u3001\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u30c7\u30d0\u30c3\u30b0\u30b7\u30f3\u30dc\u30eb\u3092\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># g++\u3067\u306e\u30b3\u30f3\u30d1\u30a4\u30eb\u4f8b\ng++ -g -O0 your_program.cpp -o your_program<\/pre>\n\n\n<div id=\"id-5e5a456e-cce5-479a-baca-b907ee2f5763\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30aa\u30d7\u30b7\u30e7\u30f3<\/th><th>\u8aac\u660e<\/th><th>\u63a8\u5968\u8a2d\u5b9a<\/th><\/tr><\/thead><tbody><tr><td>-g<\/td><td>\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u4ed8\u52a0<\/td><td>\u5fc5\u9808<\/td><\/tr><tr><td>-O0<\/td><td>\u6700\u9069\u5316\u306e\u7121\u52b9\u5316<\/td><td>\u30c7\u30d0\u30c3\u30b0\u6642\u63a8\u5968<\/td><\/tr><tr><td>-Wall<\/td><td>\u8b66\u544a\u306e\u6709\u52b9\u5316<\/td><td>\u63a8\u5968<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-17\">3. \u74b0\u5883\u5909\u6570\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<p>Valgrind\u306e\u52d5\u4f5c\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u305f\u3081\u306e\u4e3b\u8981\u306a\u74b0\u5883\u5909\u6570\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30e1\u30e2\u30ea\u5236\u9650\u306e\u8a2d\u5b9a\nexport VALGRIND_OPTS=\"--max-stackframe=4000000\"\n\n# \u30ed\u30b0\u51fa\u529b\u5148\u306e\u6307\u5b9a\nexport VALGRIND_LOG_DIR=\"\/var\/log\/valgrind\"<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-18\">4. IDE\u7d71\u5408\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<p>\u4e3b\u8981\u306aIDE\u3067\u306e\u8a2d\u5b9a\u4f8b\uff1a<\/p>\n\n\n\n<p><strong>VSCode\u8a2d\u5b9a<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"launch\": {\n        \"configurations\": [\n            {\n                \"type\": \"cppdbg\",\n                \"request\": \"launch\",\n                \"name\": \"Valgrind Debug\",\n                \"program\": \"${workspaceFolder}\/your_program\",\n                \"preLaunchTask\": \"valgrind\"\n            }\n        ]\n    }\n}<\/pre>\n\n\n\n<p><strong>CLion\u8a2d\u5b9a<\/strong>\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Valgrind\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/li>\n\n\n\n<li>Run &gt; Edit Configurations &gt; Valgrind Memcheck\u3092\u9078\u629e<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-19\">5. \u521d\u671f\u52d5\u4f5c\u78ba\u8a8d<\/h4>\n\n\n\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u5f8c\u306f\u4ee5\u4e0b\u306e\u30c6\u30b9\u30c8\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u52d5\u4f5c\u78ba\u8a8d\u3092\u884c\u3046\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ test_valgrind.cpp\n#include &lt;iostream&gt;\n\nint main() {\n    int* ptr = new int[10];  \/\/ \u30e1\u30e2\u30ea\u78ba\u4fdd\n    ptr[0] = 123;            \/\/ \u4f7f\u7528\n    \/\/ delete\u3057\u5fd8\u308c\u3092\u610f\u56f3\u7684\u306b\u4f5c\u6210\n    return 0;\n}<\/pre>\n\n\n\n<p>\u5b9f\u884c\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b3\u30f3\u30d1\u30a4\u30eb\ng++ -g -O0 test_valgrind.cpp -o test_valgrind\n\n# Valgrind\u3067\u306e\u5b9f\u884c\nvalgrind --leak-check=full .\/test_valgrind<\/pre>\n\n\n\n<p>\u3053\u306e\u57fa\u672c\u8a2d\u5b9a\u3092\u884c\u3046\u3053\u3068\u3067\u3001Valgrind\u3092\u52b9\u679c\u7684\u306b\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u74b0\u5883\u304c\u6574\u3044\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u969b\u306e\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u691c\u51fa\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-20\">\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u691c\u51fa\u306e\u5b9f\u8df5\u7684\u306a\u624b\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">Memcheck\u30c4\u30fc\u30eb\u306e\u52b9\u679c\u7684\u306a\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<p>Memcheck\u306f\u3001Valgrind\u306e\u4e2d\u6838\u3092\u6210\u3059\u30e1\u30e2\u30ea\u30c1\u30a7\u30c3\u30af\u30c4\u30fc\u30eb\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u624b\u9806\u3067\u52b9\u679c\u7684\u306a\u4f7f\u7528\u304c\u53ef\u80fd\u3067\u3059\uff1a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-22\">1. \u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u6700\u3082\u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\nvalgrind --tool=memcheck .\/your_program\n\n# \u8a73\u7d30\u306a\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u60c5\u5831\u3092\u5f97\u308b\nvalgrind --tool=memcheck --leak-check=full .\/your_program\n\n# \u672a\u521d\u671f\u5316\u5909\u6570\u306e\u51fa\u6240\u3092\u8ffd\u8de1\nvalgrind --tool=memcheck --track-origins=yes .\/your_program<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-23\">2. \u9ad8\u5ea6\u306a\u30e1\u30e2\u30ea\u30c1\u30a7\u30c3\u30af\u30aa\u30d7\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u3059\u3079\u3066\u306e\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u7a2e\u985e\u3092\u8868\u793a\nvalgrind --leak-check=full --show-leak-kinds=all .\/your_program\n\n# \u30a8\u30e9\u30fc\u767a\u751f\u6642\u306b\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3092\u8a73\u7d30\u8868\u793a\nvalgrind --num-callers=50 .\/your_program\n\n# \u30d2\u30fc\u30d7\u5185\u306e\u4e0d\u6b63\u30a2\u30af\u30bb\u30b9\u3092\u30c1\u30a7\u30c3\u30af\nvalgrind --freelist-vol=100000000 .\/your_program<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">\u3088\u304f\u3042\u308b\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u30d1\u30bf\u30fc\u30f3\u3068\u5bfe\u51e6\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-25\">1. \u5358\u7d14\u306a\u52d5\u7684\u30e1\u30e2\u30ea\u5272\u308a\u5f53\u3066\u5fd8\u308c<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\nvoid memoryLeakExample1() {\n    int* ptr = new int[100];\n    \/\/ delete\u3092\u5fd8\u308c\u3066\u3044\u308b\n}\n\n\/\/ \u4fee\u6b63\u5f8c\u306e\u30b3\u30fc\u30c9\nvoid memoryLeakExample1Fixed() {\n    int* ptr = new int[100];\n    \/\/ \u51e6\u7406\n    delete[] ptr;  \/\/ \u9069\u5207\u306a\u30e1\u30e2\u30ea\u89e3\u653e\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-26\">2. \u4f8b\u5916\u767a\u751f\u6642\u306e\u30e1\u30e2\u30ea\u30ea\u30fc\u30af<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\nvoid memoryLeakExample2() {\n    int* ptr = new int[100];\n    try {\n        \/\/ \u4f55\u3089\u304b\u306e\u51e6\u7406\n        throw std::runtime_error(\"\u30a8\u30e9\u30fc\u767a\u751f\");\n        delete[] ptr;  \/\/ \u3053\u306e\u884c\u306f\u5b9f\u884c\u3055\u308c\u306a\u3044\n    } catch (...) {\n        \/\/ \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u304c\u767a\u751f\n        throw;\n    }\n}\n\n\/\/ \u4fee\u6b63\u5f8c\u306e\u30b3\u30fc\u30c9\nvoid memoryLeakExample2Fixed() {\n    std::unique_ptr&lt;int[]&gt; ptr(new int[100]);  \/\/ \u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u3092\u4f7f\u7528\n    try {\n        \/\/ \u4f55\u3089\u304b\u306e\u51e6\u7406\n        throw std::runtime_error(\"\u30a8\u30e9\u30fc\u767a\u751f\");\n    } catch (...) {\n        \/\/ \u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306b\u3088\u308a\u81ea\u52d5\u7684\u306b\u30e1\u30e2\u30ea\u89e3\u653e\n        throw;\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-27\">3. \u30b3\u30f3\u30c6\u30ca\u5185\u306e\u30dd\u30a4\u30f3\u30bf\u7ba1\u7406<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\nclass ResourceHolder {\n    std::vector&lt;MyClass*&gt; resources;\npublic:\n    void addResource(MyClass* res) {\n        resources.push_back(res);\n    }\n    \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u306e\u89e3\u653e\u5fd8\u308c\n};\n\n\/\/ \u4fee\u6b63\u5f8c\u306e\u30b3\u30fc\u30c9\nclass ResourceHolderFixed {\n    std::vector&lt;std::unique_ptr&lt;MyClass&gt;&gt; resources;\npublic:\n    void addResource(std::unique_ptr&lt;MyClass&gt; res) {\n        resources.push_back(std::move(res));\n    }\n    \/\/ \u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306b\u3088\u308a\u81ea\u52d5\u7684\u306b\u89e3\u653e\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-28\">\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u8ce2\u3044\u89e3\u6790\u3068\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">1. Valgrind\u30ec\u30dd\u30fc\u30c8\u306e\u8aad\u307f\u65b9<\/h4>\n\n\n\n<p>\u5178\u578b\u7684\u306a\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u30ec\u30dd\u30fc\u30c8\u306e\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">==1234== HEAP SUMMARY:\n==1234== in use at exit: 1,000 bytes in 10 blocks\n==1234== total heap usage: 100 allocs, 90 frees\n==1234== \n==1234== 100 bytes in 1 blocks are definitely lost\n==1234== at 0x4C2B975: operator new[](unsigned long) (in \/usr\/lib\/valgrind\/vgpreload_memcheck-amd64-linux.so)\n==1234== by 0x400B4A: memoryLeakExample1() (example.cpp:10)\n==1234== by 0x400A69: main (main.cpp:5)<\/pre>\n\n\n\n<p>\u30ec\u30dd\u30fc\u30c8\u306e\u91cd\u8981\u306a\u90e8\u5206\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>definitely lost<\/code>: \u5b8c\u5168\u306b\u5931\u308f\u308c\u305f\u30e1\u30e2\u30ea<\/li>\n\n\n\n<li><code>indirectly lost<\/code>: \u9593\u63a5\u7684\u306b\u5931\u308f\u308c\u305f\u30e1\u30e2\u30ea<\/li>\n\n\n\n<li><code>possibly lost<\/code>: \u53ef\u80fd\u6027\u306e\u3042\u308b\u30e1\u30e2\u30ea\u30ea\u30fc\u30af<\/li>\n\n\n\n<li><code>still reachable<\/code>: \u307e\u3060\u5230\u9054\u53ef\u80fd\u306a\u30e1\u30e2\u30ea<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-30\">2. \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u691c\u51fa\u306e\u52b9\u7387\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b5\u30d7\u30ec\u30c3\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u306e\u4f7f\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b5\u30d7\u30ec\u30c3\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210\nvalgrind --gen-suppressions=all --log-file=suppression.log .\/your_program\n\n# \u30b5\u30d7\u30ec\u30c3\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u306e\u4f7f\u7528\nvalgrind --suppressions=suppression.txt .\/your_program<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u7279\u5b9a\u306e\u95a2\u6570\u3084\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u96c6\u4e2d\u30c1\u30a7\u30c3\u30af<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u7279\u5b9a\u306e\u95a2\u6570\u306e\u307f\u3092\u30c1\u30a7\u30c3\u30af\nvalgrind --trace-children=yes --track-fds=yes .\/your_program function_name<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u6761\u4ef6\u4ed8\u304d\u30d6\u30ec\u30fc\u30af\u30dd\u30a4\u30f3\u30c8\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># GDB\u3068\u306e\u9023\u643a\nvalgrind --vgdb=yes --vgdb-error=0 .\/your_program<\/pre>\n\n\n<div id=\"id-9d9f886e-5528-452b-94b2-94a0ee6b7a64\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc\u306e\u7a2e\u985e<\/th><th>\u5bfe\u51e6\u65b9\u6cd5<\/th><th>\u4e88\u9632\u7b56<\/th><\/tr><\/thead><tbody><tr><td>Definitely Lost<\/td><td>\u76f4\u63a5\u7684\u306a\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3002\u5373\u5ea7\u306b\u4fee\u6b63\u304c\u5fc5\u8981<\/td><td>\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306e\u4f7f\u7528<\/td><\/tr><tr><td>Indirectly Lost<\/td><td>\u30c7\u30fc\u30bf\u69cb\u9020\u5185\u306e\u30e1\u30e2\u30ea\u30ea\u30fc\u30af<\/td><td>\u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u306e\u9069\u5207\u306a\u89e3\u653e<\/td><\/tr><tr><td>Possibly Lost<\/td><td>\u30dd\u30a4\u30f3\u30bf\u306e\u6f14\u7b97\u306b\u3088\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u30ea\u30fc\u30af<\/td><td>\u30dd\u30a4\u30f3\u30bf\u6f14\u7b97\u306e\u6700\u5c0f\u5316<\/td><\/tr><tr><td>Still Reachable<\/td><td>\u30d7\u30ed\u30b0\u30e9\u30e0\u7d42\u4e86\u6642\u306b\u89e3\u653e\u3055\u308c\u3066\u3044\u306a\u3044\u30e1\u30e2\u30ea<\/td><td>\u30b7\u30f3\u30b0\u30eb\u30c8\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u898b\u76f4\u3057<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-31\">3. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u5272\u308a\u5f53\u3066\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e1\u30e2\u30ea\u30d7\u30fc\u30eb\u306e\u4f7f\u7528\u4f8b\nclass MemoryPool {\n    static constexpr size_t POOL_SIZE = 1024;\n    char pool[POOL_SIZE];\n    \/\/ \u30d7\u30fc\u30eb\u7ba1\u7406\u306e\u30ed\u30b8\u30c3\u30af\npublic:\n    void* allocate(size_t size);\n    void deallocate(void* ptr);\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30c7\u30fc\u30bf\u69cb\u9020\nstruct CacheFriendly {\n    std::vector&lt;int&gt; data;  \/\/ \u9023\u7d9a\u3057\u305f\u30e1\u30e2\u30ea\u9818\u57df\n    void process() {\n        \/\/ \u30c7\u30fc\u30bf\u306e\u9023\u7d9a\u30a2\u30af\u30bb\u30b9\n        for (auto&amp; item : data) {\n            \/\/ \u51e6\u7406\n        }\n    }\n};<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u624b\u6cd5\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u52b9\u679c\u7684\u306a\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u691c\u51fa\u3068\u4fee\u6b63\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-32\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-33\">Callgrind\u3092\u4f7f\u7528\u3057\u305f\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u7279\u5b9a<\/h3>\n\n\n\n<p>Callgrind\u306f\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\u6642\u9593\u3068\u30b3\u30fc\u30eb\u30b0\u30e9\u30d5\u3092\u5206\u6790\u3059\u308b\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u624b\u9806\u3067\u52b9\u679c\u7684\u306a\u5206\u6790\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-34\">1. \u57fa\u672c\u7684\u306a\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Callgrind\u306e\u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\nvalgrind --tool=callgrind .\/your_program\n\n# \u95a2\u6570\u547c\u3073\u51fa\u3057\u56de\u6570\u3082\u8a18\u9332\nvalgrind --tool=callgrind --collect-jumps=yes .\/your_program\n\n# \u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u3082\u542b\u3081\u308b\nvalgrind --tool=callgrind --cache-sim=yes .\/your_program<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-35\">2. \u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u30c7\u30fc\u30bf\u306e\u89e3\u6790<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># callgrind_annotate\u3092\u4f7f\u7528\u3057\u305f\u89e3\u6790\ncallgrind_annotate callgrind.out.&lt;pid&gt;\n\n# \u7279\u5b9a\u306e\u95a2\u6570\u306b\u6ce8\u76ee\u3057\u305f\u89e3\u6790\ncallgrind_annotate --inclusive=yes --tree=both callgrind.out.&lt;pid&gt;<\/pre>\n\n\n\n<p>\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u7d50\u679c\u306e\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">--------------------------------------------------------------------------------\nIr      Dr     Dw    file:function\n--------------------------------------------------------------------------------\n62,144  15,536 7,768 example.cpp:processData [\/usr\/local\/bin\/your_program]\n31,072   7,768 3,884 example.cpp:calculateMetrics [\/usr\/local\/bin\/your_program]\n15,536   3,884 1,942 example.cpp:updateCache [\/usr\/local\/bin\/your_program]<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-36\">\u30ad\u30e3\u30c3\u30b7\u30e5\u4f7f\u7528\u7387\u306e\u5206\u6790\u3068\u6539\u5584\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-37\">1. Cachegrind\u306b\u3088\u308b\u30ad\u30e3\u30c3\u30b7\u30e5\u5206\u6790<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30ad\u30e3\u30c3\u30b7\u30e5\u30df\u30b9\u306e\u8a73\u7d30\u306a\u5206\u6790\nvalgrind --tool=cachegrind .\/your_program\n\n# \u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\u306e\u5206\u6790\nvalgrind --tool=cachegrind --D1=32768,8,64 .\/your_program<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-38\">2. \u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u3092\u6539\u5584\u3059\u308b\u30b3\u30fc\u30c9\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u306e\u60aa\u3044\u5b9f\u88c5\nvoid inefficientCache() {\n    const int SIZE = 1024;\n    int matrix[SIZE][SIZE];\n\n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30df\u30b9\u304c\u591a\u767a\u3059\u308b\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\n    for (int i = 0; i &lt; SIZE; i++) {\n        for (int j = 0; j &lt; SIZE; j++) {\n            matrix[j][i] = i + j;  \/\/ \u5217\u512a\u5148\u30a2\u30af\u30bb\u30b9\n        }\n    }\n}\n\n\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u52b9\u7387\u306e\u826f\u3044\u5b9f\u88c5\nvoid efficientCache() {\n    const int SIZE = 1024;\n    int matrix[SIZE][SIZE];\n\n    \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\n    for (int i = 0; i &lt; SIZE; i++) {\n        for (int j = 0; j &lt; SIZE; j++) {\n            matrix[i][j] = i + j;  \/\/ \u884c\u512a\u5148\u30a2\u30af\u30bb\u30b9\n        }\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-39\">3. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n<div id=\"id-59e8456f-001b-4d61-ba47-14014f6b6c2d\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6700\u9069\u5316\u9805\u76ee<\/th><th>\u624b\u6cd5<\/th><th>\u52b9\u679c<\/th><\/tr><\/thead><tbody><tr><td>\u30eb\u30fc\u30d7\u6700\u9069\u5316<\/td><td>\u30eb\u30fc\u30d7\u30a2\u30f3\u30ed\u30fc\u30ea\u30f3\u30b0<\/td><td>\u5206\u5c90\u4e88\u6e2c\u306e\u6539\u5584<\/td><\/tr><tr><td>\u30c7\u30fc\u30bf\u69cb\u9020<\/td><td>\u30a2\u30e9\u30a4\u30f3\u30e1\u30f3\u30c8\u8abf\u6574<\/td><td>\u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u306e\u52b9\u7387\u5316<\/td><\/tr><tr><td>\u30e1\u30e2\u30ea\u30ec\u30a4\u30a2\u30a6\u30c8<\/td><td>SoA (Structure of Arrays)<\/td><td>\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u7387\u306e\u5411\u4e0a<\/td><\/tr><tr><td>\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u9078\u629e<\/td><td>\u8a08\u7b97\u91cf\u306e\u524a\u6e1b<\/td><td>\u5168\u4f53\u7684\u306a\u51e6\u7406\u6642\u9593\u306e\u77ed\u7e2e<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-40\">4. \u9ad8\u5ea6\u306a\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>SIMD\u547d\u4ee4\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ SSE\/AVX\u547d\u4ee4\u3092\u4f7f\u7528\u3057\u305f\u6700\u9069\u5316\u4f8b\n#include &lt;immintrin.h&gt;\n\nvoid optimizedCalculation(float* data, int size) {\n    for (int i = 0; i &lt; size; i += 4) {\n        __m128 vec = _mm_load_ps(&amp;data[i]);\n        vec = _mm_mul_ps(vec, vec);  \/\/ \u4e26\u5217\u51e6\u7406\n        _mm_store_ps(&amp;data[i], vec);\n    }\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30fc\u30bf\u306e\u30d7\u30ea\u30d5\u30a7\u30c3\u30c1\nvoid prefetchExample(const std::vector&lt;int&gt;&amp; data) {\n    for (size_t i = 0; i &lt; data.size(); i++) {\n        __builtin_prefetch(&amp;data[i + 16]);  \/\/ \u5148\u8aad\u307f\n        \/\/ \u30c7\u30fc\u30bf\u51e6\u7406\n    }\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u4e3b\u5c0e\u578b\u6700\u9069\u5316\uff08PGO\uff09\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306e\u6700\u9069\u5316\ng++ -fprofile-generate program.cpp -o program\n.\/program  # \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u60c5\u5831\u306e\u53ce\u96c6\ng++ -fprofile-use program.cpp -o program<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-41\">5. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u30d9\u30f3\u30c1\u30de\u30fc\u30af<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9f\u884c\u6642\u9593\u306e\u8a08\u6e2c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;chrono&gt;\n\nclass Timer {\n    using Clock = std::chrono::high_resolution_clock;\n    Clock::time_point start;\npublic:\n    Timer() : start(Clock::now()) {}\n\n    double elapsed() {\n        auto end = Clock::now();\n        return std::chrono::duration&lt;double&gt;(end - start).count();\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u76e3\u8996<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void memoryUsageCheck() {\n    struct rusage usage;\n    getrusage(RUSAGE_SELF, &amp;usage);\n    std::cout &lt;&lt; \"Memory usage: \" \n              &lt;&lt; usage.ru_maxrss &lt;&lt; \" KB\" &lt;&lt; std::endl;\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u624b\u6cd5\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u52b9\u679c\u7684\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u8df5\u7684\u306aValgrind\u30b3\u30de\u30f3\u30c9\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-42\">\u5b9f\u8df5\u7684\u306aValgrind\u30b3\u30de\u30f3\u30c9\u30aa\u30d7\u30b7\u30e7\u30f3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-43\">\u8ab2\u984c\u5225\u304a\u3059\u3059\u3081\u30aa\u30d7\u30b7\u30e7\u30f3\u8a2d\u5b9a<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-44\">1. \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u691c\u51fa\u306e\u8a73\u7d30\u5206\u6790<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5b8c\u5168\u306a\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u691c\u51fa\nvalgrind --leak-check=full \\\n         --show-leak-kinds=all \\\n         --track-origins=yes \\\n         --verbose \\\n         .\/your_program\n\n# \u30ea\u30fc\u30af\u691c\u51fa\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\nvalgrind --leak-check=full \\\n         --show-reachable=yes \\\n         --num-callers=50 \\\n         --error-limit=no \\\n         .\/your_program<\/pre>\n\n\n\n<p>\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8aac\u660e\uff1a<\/p>\n\n\n<div id=\"id-3ac754bc-38e4-4041-828b-267aa37f5cbd\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30aa\u30d7\u30b7\u30e7\u30f3<\/th><th>\u8aac\u660e<\/th><th>\u4f7f\u7528\u30b7\u30fc\u30f3<\/th><\/tr><\/thead><tbody><tr><td>\u2013leak-check=full<\/td><td>\u8a73\u7d30\u306a\u30ea\u30fc\u30af\u60c5\u5831\u3092\u8868\u793a<\/td><td>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u8a73\u7d30\u8abf\u67fb<\/td><\/tr><tr><td>\u2013show-leak-kinds=all<\/td><td>\u3059\u3079\u3066\u306e\u7a2e\u985e\u306e\u30ea\u30fc\u30af\u3092\u8868\u793a<\/td><td>\u5305\u62ec\u7684\u306a\u30e1\u30e2\u30ea\u5206\u6790<\/td><\/tr><tr><td>\u2013track-origins=yes<\/td><td>\u672a\u521d\u671f\u5316\u5024\u306e\u51fa\u6240\u3092\u8ffd\u8de1<\/td><td>\u672a\u521d\u671f\u5316\u5909\u6570\u306e\u30c7\u30d0\u30c3\u30b0<\/td><\/tr><tr><td>\u2013num-callers=50<\/td><td>\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u306e\u6df1\u3055\u3092\u6307\u5b9a<\/td><td>\u8907\u96d1\u306a\u30b3\u30fc\u30eb\u30b9\u30bf\u30c3\u30af\u306e\u5206\u6790<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-45\">2. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5206\u6790\u7528\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Callgrind\u306b\u3088\u308b\u8a73\u7d30\u306a\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\nvalgrind --tool=callgrind \\\n         --cache-sim=yes \\\n         --branch-sim=yes \\\n         --dump-instr=yes \\\n         --collect-jumps=yes \\\n         .\/your_program\n\n# \u30ad\u30e3\u30c3\u30b7\u30e5\u89e3\u6790\u306e\u8a73\u7d30\u8a2d\u5b9a\nvalgrind --tool=cachegrind \\\n         --D1=32768,8,64 \\\n         --LL=8388608,16,64 \\\n         --branch-sim=yes \\\n         .\/your_program<\/pre>\n\n\n\n<p>\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u30d1\u30e9\u30e1\u30fc\u30bf\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30ad\u30e3\u30c3\u30b7\u30e5\u30b5\u30a4\u30ba\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\n--I1=&lt;size&gt;,&lt;associativity&gt;,&lt;line size&gt;  # L1\u547d\u4ee4\u30ad\u30e3\u30c3\u30b7\u30e5\n--D1=&lt;size&gt;,&lt;associativity&gt;,&lt;line size&gt;  # L1\u30c7\u30fc\u30bf\u30ad\u30e3\u30c3\u30b7\u30e5\n--LL=&lt;size&gt;,&lt;associativity&gt;,&lt;line size&gt;  # L2\u30ad\u30e3\u30c3\u30b7\u30e5<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-46\">3. \u30b9\u30ec\u30c3\u30c9\u95a2\u9023\u554f\u984c\u306e\u691c\u51fa<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30c7\u30fc\u30bf\u7af6\u5408\u306e\u691c\u51fa\nvalgrind --tool=helgrind \\\n         --history-level=full \\\n         --conflict-cache-size=10000000 \\\n         .\/your_program\n\n# DRD\uff08Data Race Detector\uff09\u30c4\u30fc\u30eb\u306e\u4f7f\u7528\nvalgrind --tool=drd \\\n         --check-stack-var=yes \\\n         --segment-merging=no \\\n         .\/your_program<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-47\">4. \u30d2\u30fc\u30d7\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u8a73\u7d30\u5206\u6790\nvalgrind --tool=massif \\\n         --time-unit=B \\\n         --detailed-freq=10 \\\n         --max-snapshots=100 \\\n         .\/your_program\n\n# \u7d50\u679c\u306e\u89e3\u6790\nms_print massif.out.&lt;pid&gt;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-48\">\u51fa\u529b\u7d50\u679c\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3068\u30ed\u30b0\u89e3\u6790<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-49\">1. \u30ed\u30b0\u51fa\u529b\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u51fa\u529b\nvalgrind --log-file=valgrind_%p.log \\\n         --log-socket=127.0.0.1:7777 \\\n         .\/your_program\n\n# \u30a8\u30e9\u30fc\u51fa\u529b\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\nvalgrind --gen-suppressions=all \\\n         --suppressions=custom.supp \\\n         .\/your_program<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-50\">2. \u30b5\u30d7\u30ec\u30c3\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210\u3068\u4f7f\u7528<\/h4>\n\n\n\n<p>\u30b5\u30d7\u30ec\u30c3\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u306e\u4f8b\uff08custom.supp\uff09\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n   ignore_libstdc++_leaks\n   Memcheck:Leak\n   match-leak-kinds: reachable\n   fun:malloc\n   obj:\/usr\/lib\/x86_64-linux-gnu\/libstdc++.so.6\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-51\">3. XML\u51fa\u529b\u306e\u6d3b\u7528<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># XML\u5f62\u5f0f\u3067\u306e\u51fa\u529b\nvalgrind --xml=yes \\\n         --xml-file=valgrind_report.xml \\\n         .\/your_program\n\n# XML\u304b\u3089HTML\u30ec\u30dd\u30fc\u30c8\u306e\u751f\u6210\nvalgrind-log-converter valgrind_report.xml -o report.html<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-52\">4. \u30ab\u30b9\u30bf\u30e0\u30d5\u30a3\u30eb\u30bf\u30fc\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/usr\/bin\/python3\n# valgrind_filter.py\nimport sys\nimport re\n\ndef filter_valgrind_output(input_file):\n    with open(input_file, 'r') as f:\n        for line in f:\n            # \u30a8\u30e9\u30fc\u884c\u306e\u307f\u3092\u62bd\u51fa\n            if 'ERROR SUMMARY' in line or 'definitely lost' in line:\n                print(line.strip())\n            # \u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u306e\u6574\u5f62\n            if 'at 0x' in line:\n                parts = line.split(':')\n                if len(parts) &gt; 1:\n                    print(f\"Stack: {parts[-1].strip()}\")\n\n# \u30b9\u30af\u30ea\u30d7\u30c8\u306e\u4f7f\u7528\u4f8b\n# valgrind --log-file=valgrind.log .\/program\n# python3 valgrind_filter.py valgrind.log<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-53\">5. \u52b9\u7387\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u30e1\u30e2\u30ea\u30c1\u30a7\u30c3\u30af<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u521d\u671f\u30c1\u30a7\u30c3\u30af\nvalgrind --leak-check=yes .\/your_program\n\n# \u30a8\u30e9\u30fc\u304c\u898b\u3064\u304b\u3063\u305f\u5834\u5408\u306e\u8a73\u7d30\u5206\u6790\nvalgrind --leak-check=full \\\n         --show-leak-kinds=all \\\n         --track-origins=yes \\\n         --log-file=detailed_analysis.log \\\n         .\/your_program<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u6bb5\u968e\u7684\u306a\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b9\u30c6\u30c3\u30d71: \u57fa\u672c\u7684\u306a\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\nvalgrind --tool=callgrind .\/your_program\n\n# \u30b9\u30c6\u30c3\u30d72: \u8a73\u7d30\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u5206\u6790\nvalgrind --tool=cachegrind .\/your_program\n\n# \u30b9\u30c6\u30c3\u30d73: \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u5206\u6790\nvalgrind --tool=massif .\/your_program<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3068\u8a2d\u5b9a\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u52b9\u679c\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u3068\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3067\u306eValgrind\u6d3b\u7528\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-54\">CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3067\u306eValgrind\u6d3b\u7528\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-55\">\u81ea\u52d5\u30c6\u30b9\u30c8\u3078\u306e\u7d44\u307f\u8fbc\u307f\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-56\">1. \u30c6\u30b9\u30c8\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u4f5c\u6210<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/bash\n# valgrind_test.sh\n\n# \u8a2d\u5b9a\nVALGRIND_OPTS=\"--leak-check=full --error-exitcode=1 --show-leak-kinds=all\"\nTEST_BINARY=\".\/your_test_program\"\nLOG_FILE=\"valgrind_results.log\"\n\n# Valgrind\u3067\u30c6\u30b9\u30c8\u3092\u5b9f\u884c\nvalgrind ${VALGRIND_OPTS} \\\n    --xml=yes \\\n    --xml-file=\"${LOG_FILE}\" \\\n    ${TEST_BINARY}\n\n# \u7d42\u4e86\u30b3\u30fc\u30c9\u306e\u78ba\u8a8d\nEXIT_CODE=$?\nif [ ${EXIT_CODE} -ne 0 ]; then\n    echo \"Valgrind\u30c6\u30b9\u30c8\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\"\n    exit ${EXIT_CODE}\nfi<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-57\">2. CMake\u3068\u306e\u7d71\u5408<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CMakeLists.txt\nenable_testing()\n\n# Valgrind\u30c6\u30b9\u30c8\u306e\u8ffd\u52a0\nadd_test(NAME ValgrindTest\n         COMMAND valgrind --leak-check=full\n                         --error-exitcode=1\n                         --show-leak-kinds=all\n                         $&lt;TARGET_FILE:your_test_program&gt;)\n\n# \u30c6\u30b9\u30c8\u5931\u6557\u6761\u4ef6\u306e\u8a2d\u5b9a\nset_tests_properties(ValgrindTest\n    PROPERTIES\n    FAIL_REGULAR_EXPRESSION \"ERROR SUMMARY: [^0].*\"\n    TIMEOUT 3600)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-58\">Jenkins\/GitLab CI\u3067\u306e\u5b9f\u8df5\u7684\u306a\u8a2d\u5b9a\u4f8b<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-59\">1. Jenkins\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Jenkinsfile\npipeline {\n    agent any\n\n    environment {\n        VALGRIND_OPTS = '--leak-check=full --error-exitcode=1 --show-leak-kinds=all'\n    }\n\n    stages {\n        stage('Build') {\n            steps {\n                sh 'cmake -B build -S .'\n                sh 'cmake --build build'\n            }\n        }\n\n        stage('Valgrind Tests') {\n            steps {\n                script {\n                    try {\n                        sh \"\"\"\n                            cd build\n                            valgrind ${VALGRIND_OPTS} \\\n                                --xml=yes \\\n                                --xml-file=valgrind_report.xml \\\n                                .\/tests\/unit_tests\n                        \"\"\"\n                    } finally {\n                        \/\/ Valgrind\u30ec\u30dd\u30fc\u30c8\u306e\u4fdd\u5b58\n                        archiveArtifacts 'build\/valgrind_report.xml'\n                        \/\/ Valgrind\u30ec\u30dd\u30fc\u30c8\u306e\u89e3\u6790\n                        recordIssues(tools: [valgrind()])\n                    }\n                }\n            }\n        }\n    }\n\n    post {\n        always {\n            \/\/ \u30c6\u30b9\u30c8\u7d50\u679c\u306e\u901a\u77e5\n            emailext (\n                subject: \"Pipeline Status: ${currentBuild.result}\",\n                body: \"Valgrind\u30c6\u30b9\u30c8\u7d50\u679c\u306e\u8a73\u7d30\u306f ${BUILD_URL} \u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\",\n                recipientProviders: [developers()]\n            )\n        }\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-60\">2. GitLab CI\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># .gitlab-ci.yml\nvariables:\n  VALGRIND_OPTS: \"--leak-check=full --error-exitcode=1 --show-leak-kinds=all\"\n\nstages:\n  - build\n  - test\n  - analyze\n\nbuild:\n  stage: build\n  script:\n    - cmake -B build -S .\n    - cmake --build build\n  artifacts:\n    paths:\n      - build\/\n\nvalgrind_test:\n  stage: test\n  script:\n    - cd build\n    - |\n      valgrind ${VALGRIND_OPTS} \\\n        --xml=yes \\\n        --xml-file=valgrind_report.xml \\\n        .\/tests\/unit_tests\n  artifacts:\n    reports:\n      junit: build\/valgrind_report.xml\n    paths:\n      - build\/valgrind_report.xml\n\nanalyze_results:\n  stage: analyze\n  script:\n    - python3 scripts\/analyze_valgrind_results.py build\/valgrind_report.xml\n  dependencies:\n    - valgrind_test<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-61\">3. \u7d50\u679c\u89e3\u6790\u30b9\u30af\u30ea\u30d7\u30c8<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># analyze_valgrind_results.py\nimport xml.etree.ElementTree as ET\nimport sys\n\ndef analyze_valgrind_report(xml_file):\n    tree = ET.parse(xml_file)\n    root = tree.getroot()\n\n    errors = root.findall('.\/\/error')\n    leaks = [e for e in errors if 'Leak_' in e.find('kind').text]\n\n    print(f\"\u691c\u51fa\u3055\u308c\u305f\u30a8\u30e9\u30fc\u7dcf\u6570: {len(errors)}\")\n    print(f\"\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u6570: {len(leaks)}\")\n\n    if len(errors) &gt; 0:\n        print(\"\\n\u91cd\u8981\u306a\u30a8\u30e9\u30fc\u306e\u8a73\u7d30:\")\n        for error in errors[:5]:  # \u6700\u521d\u306e5\u3064\u306e\u30a8\u30e9\u30fc\u306e\u307f\u8868\u793a\n            kind = error.find('kind').text\n            print(f\"\\n\u30a8\u30e9\u30fc\u30bf\u30a4\u30d7: {kind}\")\n            print(\"\u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9:\")\n            for frame in error.findall('.\/\/frame')[:3]:\n                if frame.find('file') is not None:\n                    print(f\"  {frame.find('file').text}:{frame.find('line').text}\")\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        print(\"Usage: python analyze_valgrind_results.py &lt;valgrind_report.xml&gt;\")\n        sys.exit(1)\n\n    analyze_valgrind_report(sys.argv[1])<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-62\">4. GitHub Actions\u3067\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># .github\/workflows\/valgrind.yml\nname: Valgrind Tests\n\non: [push, pull_request]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions\/checkout@v2\n\n    - name: Install dependencies\n      run: |\n        sudo apt-get update\n        sudo apt-get install -y valgrind cmake\n\n    - name: Build\n      run: |\n        cmake -B build -S .\n        cmake --build build\n\n    - name: Run Valgrind tests\n      run: |\n        cd build\n        valgrind --leak-check=full \\\n                 --error-exitcode=1 \\\n                 --show-leak-kinds=all \\\n                 --xml=yes \\\n                 --xml-file=valgrind_report.xml \\\n                 .\/tests\/unit_tests\n\n    - name: Upload Valgrind report\n      uses: actions\/upload-artifact@v2\n      with:\n        name: valgrind-report\n        path: build\/valgrind_report.xml<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-63\">5. \u7d99\u7d9a\u7684\u54c1\u8cea\u76e3\u8996\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># quality_check.sh\n#!\/bin\/bash\n\n# \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u95be\u5024\u8a2d\u5b9a\nMAX_ALLOWED_LEAKS=0\nMAX_ALLOWED_ERRORS=0\n\n# Valgrind\u30c6\u30b9\u30c8\u306e\u5b9f\u884c\nvalgrind --leak-check=full \\\n         --show-leak-kinds=all \\\n         --xml=yes \\\n         --xml-file=valgrind_report.xml \\\n         .\/your_program\n\n# \u7d50\u679c\u306e\u89e3\u6790\nLEAK_COUNT=$(grep -c \"definitely lost\" valgrind_report.xml)\nERROR_COUNT=$(grep -c \"&lt;error&gt;\" valgrind_report.xml)\n\n# \u54c1\u8cea\u57fa\u6e96\u306e\u30c1\u30a7\u30c3\u30af\nif [ ${LEAK_COUNT} -gt ${MAX_ALLOWED_LEAKS} ]; then\n    echo \"\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f: ${LEAK_COUNT}\"\n    exit 1\nfi\n\nif [ ${ERROR_COUNT} -gt ${MAX_ALLOWED_ERRORS} ]; then\n    echo \"Valgrind\u30a8\u30e9\u30fc\u304c\u691c\u51fa\u3055\u308c\u307e\u3057\u305f: ${ERROR_COUNT}\"\n    exit 1\nfi<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u4f8b\u3092\u57fa\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u679c\u7684\u306a\u54c1\u8cea\u7ba1\u7406\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Valgrind\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-64\">Valgrind\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-65\">\u3088\u304f\u3042\u308b\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-66\">1. \u8aa4\u691c\u77e5\u306e\u51e6\u7406<\/h4>\n\n\n\n<p>Valgrind\u304c\u8aa4\u3063\u3066\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3092\u5831\u544a\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5bfe\u51e6\u304c\u53ef\u80fd\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8aa4\u691c\u77e5\u306e\u4f8b\nclass ResourceManager {\n    void* resource;\npublic:\n    ResourceManager() {\n        resource = custom_allocator();  \/\/ \u30ab\u30b9\u30bf\u30e0\u30a2\u30ed\u30b1\u30fc\u30bf\u3092\u4f7f\u7528\n    }\n    ~ResourceManager() {\n        custom_deallocator(resource);  \/\/ Valgrind\u306f\u8a8d\u8b58\u3067\u304d\u306a\u3044\n    }\n};<\/pre>\n\n\n\n<p>\u89e3\u6c7a\u7b56\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b5\u30d7\u30ec\u30c3\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210\n{\n   custom_allocator_suppress\n   Memcheck:Leak\n   fun:custom_allocator\n   ...\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-67\">2. \u5b9f\u884c\u901f\u5ea6\u306e\u554f\u984c<\/h4>\n\n\n\n<p>Valgrind\u306b\u3088\u308b\u5b9f\u884c\u901f\u5ea6\u4f4e\u4e0b\u3078\u306e\u5bfe\u51e6\uff1a<\/p>\n\n\n<div id=\"id-87ad6f8b-dcb9-492e-94df-ffdc8166e10d\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u72b6\u6cc1<\/th><th>\u5bfe\u7b56<\/th><th>\u52b9\u679c<\/th><\/tr><\/thead><tbody><tr><td>\u5168\u4f53\u7684\u306a\u9045\u5ef6<\/td><td>\u2013tool=none\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u78ba\u8a8d<\/td><td>\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u306e\u628a\u63e1<\/td><\/tr><tr><td>\u7279\u5b9a\u7b87\u6240\u306e\u9045\u5ef6<\/td><td>\u2013trace-children=no\u3067\u5b50\u30d7\u30ed\u30bb\u30b9\u3092\u9664\u5916<\/td><td>\u5206\u6790\u7bc4\u56f2\u306e\u9650\u5b9a<\/td><\/tr><tr><td>\u5927\u91cf\u306e\u30ed\u30b0\u51fa\u529b<\/td><td>\u2013log-file\u6307\u5b9a\u3067\u51fa\u529b\u3092\u5206\u5272<\/td><td>I\/O\u8ca0\u8377\u306e\u5206\u6563<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-68\">3. \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<p>\u904e\u5270\u306a\u30e1\u30e2\u30ea\u4f7f\u7528\u3092\u6291\u5236\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u5236\u9650\nvalgrind --max-stackframe=2000000 \\\n         --main-stacksize=8000000 \\\n         --num-callers=20 \\\n         .\/your_program<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-69\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3078\u306e\u5bfe\u51e6<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-70\">1. \u5b9f\u884c\u6642\u9593\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u91cd\u3044\u30eb\u30fc\u30d7\u306e\u6700\u9069\u5316\u4f8b\nvoid heavyLoop() {\n    std::vector&lt;int&gt; data(1000000);\n\n    \/\/ \u975e\u52b9\u7387\u306a\u5b9f\u88c5\n    for (int i = 0; i &lt; data.size(); i++) {\n        valgrind_heavy_operation(&amp;data[i]);\n    }\n\n    \/\/ \u6700\u9069\u5316\u7248\n    #ifdef RUNNING_ON_VALGRIND\n    const int BATCH_SIZE = 1000;\n    for (int i = 0; i &lt; data.size(); i += BATCH_SIZE) {\n        valgrind_batch_operation(&amp;data[i], BATCH_SIZE);\n    }\n    #else\n    \/\/ \u901a\u5e38\u306e\u5b9f\u88c5\n    for (auto&amp; item : data) {\n        normal_operation(&amp;item);\n    }\n    #endif\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-71\">2. \u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30e1\u30e2\u30ea\u30a2\u30af\u30bb\u30b9\u30d1\u30bf\u30fc\u30f3\u306e\u6539\u5584\nclass OptimizedContainer {\n    static const size_t BLOCK_SIZE = 4096;  \/\/ \u30da\u30fc\u30b8\u30b5\u30a4\u30ba\u306b\u5408\u308f\u305b\u308b\n    std::vector&lt;char&gt; data;\n\npublic:\n    void allocate(size_t size) {\n        \/\/ \u30a2\u30e9\u30a4\u30f3\u30e1\u30f3\u30c8\u3092\u8003\u616e\u3057\u305f\u30b5\u30a4\u30ba\u8abf\u6574\n        size_t aligned_size = (size + BLOCK_SIZE - 1) &amp; ~(BLOCK_SIZE - 1);\n        data.resize(aligned_size);\n    }\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-72\">3. Valgrind\u306e\u52d5\u4f5c\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0<\/h4>\n\n\n\n<p>\u9ad8\u5ea6\u306a\u8a2d\u5b9a\u30aa\u30d7\u30b7\u30e7\u30f3\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u8abf\u6574\nvalgrind --smc-check=all-non-file \\\n         --cache-sim=yes \\\n         --branch-sim=yes \\\n         .\/your_program\n\n# \u30b9\u30bf\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u6df1\u3055\u306e\u5236\u9650\nvalgrind --num-callers=20 \\\n         --max-stackframe=2000000 \\\n         .\/your_program\n\n# \u30a8\u30e9\u30fc\u5831\u544a\u306e\u5236\u9650\nvalgrind --error-limit=no \\\n         --max-threads=32 \\\n         .\/your_program<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-73\">4. \u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<p>\u30b3\u30f3\u30d1\u30a4\u30eb\u8a2d\u5b9a\u306e\u8abf\u6574\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u6700\u9069\u5316\u30ec\u30d9\u30eb\u306e\u8abf\u6574\ng++ -O1 -g source.cpp -o program  # O1\u3067\u57fa\u672c\u7684\u306a\u6700\u9069\u5316\u3092\u6709\u52b9\u5316\n\n# \u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u5236\u9650\ng++ -g1 source.cpp -o program     # \u5fc5\u8981\u6700\u5c0f\u9650\u306e\u30c7\u30d0\u30c3\u30b0\u60c5\u5831<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-74\">5. \u4e00\u822c\u7684\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30d5\u30ed\u30fc<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u554f\u984c\u306e\u5207\u308a\u5206\u3051<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u57fa\u672c\u7684\u306a\u30c1\u30a7\u30c3\u30af\nvalgrind --tool=none .\/your_program\n\n# \u30c4\u30fc\u30eb\u5225\u306e\u554f\u984c\u78ba\u8a8d\nvalgrind --tool=memcheck .\/your_program\nvalgrind --tool=callgrind .\/your_program\nvalgrind --tool=massif .\/your_program<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u5206\u6790\u30b9\u30af\u30ea\u30d7\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/usr\/bin\/python3\n# analyze_errors.py\n\nimport sys\nimport re\n\ndef analyze_valgrind_log(log_file):\n    error_patterns = {\n        'memory_leak': r'definitely lost:.*',\n        'invalid_read': r'Invalid read.*',\n        'invalid_write': r'Invalid write.*',\n        'uninitialized': r'Use of uninitialized value.*'\n    }\n\n    stats = {key: 0 for key in error_patterns}\n\n    with open(log_file, 'r') as f:\n        content = f.read()\n        for error_type, pattern in error_patterns.items():\n            matches = re.findall(pattern, content)\n            stats[error_type] = len(matches)\n\n    return stats\n\nif __name__ == '__main__':\n    if len(sys.argv) != 2:\n        print('Usage: python analyze_errors.py &lt;valgrind_log_file&gt;')\n        sys.exit(1)\n\n    stats = analyze_valgrind_log(sys.argv[1])\n    for error_type, count in stats.items():\n        print(f'{error_type}: {count} occurrences')<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6539\u5584\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/bash\n# performance_check.sh\n\n# \u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6e2c\u5b9a\ntime valgrind --tool=none .\/your_program &gt; baseline.log 2&gt;&amp;1\n\n# \u30e1\u30e2\u30ea\u30c1\u30a7\u30c3\u30af\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u6e2c\u5b9a\ntime valgrind --tool=memcheck .\/your_program &gt; memcheck.log 2&gt;&amp;1\n\n# \u30ad\u30e3\u30c3\u30b7\u30e5\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\ntime valgrind --tool=cachegrind .\/your_program &gt; cachegrind.log 2&gt;&amp;1\n\n# \u7d50\u679c\u306e\u6bd4\u8f03\necho \"Performance Comparison:\"\necho \"---------------------\"\necho \"Baseline:\"\ngrep \"real\" baseline.log\necho \"Memcheck:\"\ngrep \"real\" memcheck.log\necho \"Cachegrind:\"\ngrep \"real\" cachegrind.log<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u624b\u6cd5\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001Valgrind\u306e\u52b9\u679c\u7684\u306a\u6d3b\u7528\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3055\u3089\u306a\u308b\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a\u306b\u5411\u3051\u305f\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-75\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\uff1a\u3055\u3089\u306b\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a\u306b\u5411\u3051\u3066<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-76\">\u4ed6\u306e\u30e1\u30e2\u30ea\u89e3\u6790\u30c4\u30fc\u30eb\u306e\u6709\u7528\u6027<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-77\">1. AddressSanitizer (ASan)<\/h4>\n\n\n\n<p>ASan\u306fValgrind\u306e\u88dc\u5b8c\u30c4\u30fc\u30eb\u3068\u3057\u3066\u975e\u5e38\u306b\u52b9\u679c\u7684\u3067\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ ASan\u3092\u4f7f\u7528\u3057\u305f\u30b3\u30f3\u30d1\u30a4\u30eb\u4f8b\ng++ -fsanitize=address -fno-omit-frame-pointer -g source.cpp\n\n\/\/ ASan\u304c\u691c\u51fa\u3067\u304d\u308b\u5178\u578b\u7684\u306a\u554f\u984c\nvoid addressSanitizerExample() {\n    int *array = new int[100];\n    array[100] = 0;  \/\/ \u914d\u5217\u5916\u30a2\u30af\u30bb\u30b9\uff1aASan\u304c\u691c\u51fa\n    delete[] array;\n    array[0] = 1;    \/\/ use-after-free\uff1aASan\u304c\u691c\u51fa\n}<\/pre>\n\n\n\n<p>ASan\u306e\u7279\u5fb4\u6bd4\u8f03\uff1a<\/p>\n\n\n<div id=\"id-7e0160ec-2efc-4c0c-ac5e-f8f1a8557d36\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6a5f\u80fd<\/th><th>Valgrind<\/th><th>ASan<\/th><\/tr><\/thead><tbody><tr><td>\u5b9f\u884c\u901f\u5ea6<\/td><td>\u9045\u3044\uff0810-50\u500d\uff09<\/td><td>\u6bd4\u8f03\u7684\u901f\u3044\uff082-3\u500d\uff09<\/td><\/tr><tr><td>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf<\/td><td>\u5927\u304d\u3044<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><\/tr><tr><td>\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/td><td>\u5bb9\u6613<\/td><td>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u8a2d\u5b9a\u5fc5\u8981<\/td><\/tr><tr><td>\u30a8\u30e9\u30fc\u691c\u51fa\u7cbe\u5ea6<\/td><td>\u975e\u5e38\u306b\u9ad8\u3044<\/td><td>\u9ad8\u3044<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-78\">2. Memory Sanitizer (MSan)<\/h4>\n\n\n\n<p>\u672a\u521d\u671f\u5316\u30e1\u30e2\u30ea\u306e\u4f7f\u7528\u3092\u691c\u51fa\u3059\u308b\u305f\u3081\u306e\u5c02\u7528\u30c4\u30fc\u30eb\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ MSan\u3092\u4f7f\u7528\u3057\u305f\u30b3\u30f3\u30d1\u30a4\u30eb\ng++ -fsanitize=memory -fno-omit-frame-pointer -g source.cpp\n\n\/\/ MSan\u304c\u691c\u51fa\u3059\u308b\u4f8b\nvoid memorySanitizerExample() {\n    int value;\n    if (value &gt; 0) {  \/\/ \u672a\u521d\u671f\u5316\u5909\u6570\u306e\u4f7f\u7528\uff1aMSan\u304c\u691c\u51fa\n        \/\/ \u51e6\u7406\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-79\">3. Static Analyzers<\/h4>\n\n\n\n<p>\u9759\u7684\u89e3\u6790\u30c4\u30fc\u30eb\u3068\u306e\u7d44\u307f\u5408\u308f\u305b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># clang-analyzer\u306e\u4f7f\u7528\u4f8b\nscan-build g++ -c source.cpp\n\n# cppcheck\u306e\u4f7f\u7528\u4f8b\ncppcheck --enable=all source.cpp<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-80\">\u7d99\u7d9a\u7684\u306a\u30b3\u30fc\u30c9\u54c1\u8cea\u5411\u4e0a\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-81\">1. \u30e1\u30e2\u30ea\u7ba1\u7406\u306e\u73fe\u4ee3\u7684\u30a2\u30d7\u30ed\u30fc\u30c1<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306e\u6d3b\u7528\nclass ModernResourceManager {\n    std::unique_ptr&lt;Resource&gt; resource;\n    std::shared_ptr&lt;Cache&gt; cache;\n\npublic:\n    void processData() {\n        \/\/ RAII\u30d1\u30bf\u30fc\u30f3\u306e\u6d3b\u7528\n        auto tempResource = std::make_unique&lt;TempResource&gt;();\n        \/\/ \u81ea\u52d5\u7684\u306b\u30ea\u30bd\u30fc\u30b9\u89e3\u653e\n    }\n};\n\n\/\/ \u30e1\u30e2\u30ea\u30d7\u30fc\u30eb\u306e\u5b9f\u88c5\ntemplate&lt;typename T&gt;\nclass MemoryPool {\n    static constexpr size_t POOL_SIZE = 1024;\n    std::array&lt;T, POOL_SIZE&gt; pool;\n    std::vector&lt;size_t&gt; freeIndices;\n\npublic:\n    T* allocate() {\n        if (freeIndices.empty()) return nullptr;\n        size_t index = freeIndices.back();\n        freeIndices.pop_back();\n        return &amp;pool[index];\n    }\n\n    void deallocate(T* ptr) {\n        size_t index = ptr - &amp;pool[0];\n        freeIndices.push_back(index);\n    }\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-82\">2. \u81ea\u52d5\u30c6\u30b9\u30c8\u6226\u7565<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ GoogleTest\u3092\u4f7f\u7528\u3057\u305f\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u30c6\u30b9\u30c8\n#include &lt;gtest\/gtest.h&gt;\n\nclass MemoryLeakTest : public ::testing::Test {\nprotected:\n    void SetUp() override {\n        \/\/ Valgrind\u306e\u521d\u671f\u5316\n    }\n\n    void TearDown() override {\n        \/\/ \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u30c1\u30a7\u30c3\u30af\n    }\n};\n\nTEST_F(MemoryLeakTest, NoLeaksInCriticalOperation) {\n    \/\/ \u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\n    {\n        CriticalOperation op;\n        op.execute();\n    }\n    \/\/ \u30b9\u30b3\u30fc\u30d7\u3092\u629c\u3051\u305f\u6642\u70b9\u3067\u30ea\u30fc\u30af\u30c1\u30a7\u30c3\u30af\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-83\">3. \u7d99\u7d9a\u7684\u306a\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u4f53\u5236<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># monitoring_dashboard.py\nimport dash\nimport plotly.graph_objects as go\nfrom dash import dcc, html\n\ndef create_memory_dashboard():\n    app = dash.Dash(__name__)\n\n    app.layout = html.Div([\n        html.H1('\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0'),\n        dcc.Graph(\n            id='memory-usage-graph',\n            figure={\n                'data': [\n                    go.Scatter(\n                        x=timestamps,\n                        y=memory_usage,\n                        mode='lines+markers'\n                    )\n                ]\n            }\n        )\n    ])\n\n    return app<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-84\">4. \u958b\u767a\u30d7\u30ed\u30bb\u30b9\u306e\u6539\u5584\u6226\u7565<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">graph TD\n    A[\u30b3\u30fc\u30c9\u5b9f\u88c5] --&gt;|\u9759\u7684\u89e3\u6790| B[\u521d\u671f\u30c1\u30a7\u30c3\u30af]\n    B --&gt;|Valgrind| C[\u52d5\u7684\u89e3\u6790]\n    C --&gt;|ASan\/MSan| D[\u8ffd\u52a0\u30c1\u30a7\u30c3\u30af]\n    D --&gt;|\u6027\u80fd\u5206\u6790| E[\u6700\u9069\u5316]\n    E --&gt;|\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc| F[\u54c1\u8cea\u78ba\u8a8d]\n    F --&gt;|\u627f\u8a8d| G[\u30de\u30fc\u30b8]<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-85\">5. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\nclass PerformanceMonitor {\n    using Clock = std::chrono::high_resolution_clock;\n    struct Metrics {\n        double executionTime;\n        size_t memoryUsage;\n        size_t cacheHits;\n    };\n\n    std::map&lt;std::string, Metrics&gt; measurements;\n\npublic:\n    template&lt;typename Func&gt;\n    void measure(const std::string&amp; name, Func&amp;&amp; func) {\n        auto start = Clock::now();\n        func();\n        auto end = Clock::now();\n\n        Metrics m;\n        m.executionTime = std::chrono::duration&lt;double&gt;(end - start).count();\n        \/\/ \u305d\u306e\u4ed6\u306e\u30e1\u30c8\u30ea\u30af\u30b9\u53ce\u96c6\n        measurements[name] = m;\n    }\n\n    void generateReport() {\n        for (const auto&amp; [name, metrics] : measurements) {\n            std::cout &lt;&lt; \"Operation: \" &lt;&lt; name &lt;&lt; \"\\n\"\n                      &lt;&lt; \"Time: \" &lt;&lt; metrics.executionTime &lt;&lt; \"s\\n\"\n                      &lt;&lt; \"Memory: \" &lt;&lt; metrics.memoryUsage &lt;&lt; \" bytes\\n\";\n        }\n    }\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-86\">6. \u5c06\u6765\u3078\u306e\u5c55\u671b<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>AI\u3092\u6d3b\u7528\u3057\u305f\u30d0\u30b0\u4e88\u6e2c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6a5f\u68b0\u5b66\u7fd2\u30e2\u30c7\u30eb\u306b\u3088\u308b\u30b3\u30fc\u30c9\u30d1\u30bf\u30fc\u30f3\u5206\u6790<\/li>\n\n\n\n<li>\u81ea\u52d5\u30d0\u30b0\u4fee\u6b63\u63d0\u6848\u30b7\u30b9\u30c6\u30e0<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5206\u6563\u89e3\u6790\u30b7\u30b9\u30c6\u30e0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u4e26\u5217\u89e3\u6790<\/li>\n\n\n\n<li>\u30af\u30e9\u30a6\u30c9\u30d9\u30fc\u30b9\u306e\u89e3\u6790\u74b0\u5883<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u65b0\u3057\u3044\u8a00\u8a9e\u6a5f\u80fd\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C++20\u4ee5\u964d\u306e\u6a5f\u80fd\u3092\u6d3b\u7528\u3057\u305f\u30e1\u30e2\u30ea\u5b89\u5168\u6027\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u30b3\u30f3\u30bb\u30d7\u30c8\u3092\u4f7f\u7528\u3057\u305f\u578b\u5b89\u5168\u6027\u306e\u5f37\u5316<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u624b\u6cd5\u3068\u30c4\u30fc\u30eb\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u52b9\u7387\u7684\u3067\u5b89\u5168\u306a\u958b\u767a\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7d99\u7d9a\u7684\u306a\u6539\u5584\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306b\u3088\u308a\u3001\u9577\u671f\u7684\u306a\u30b3\u30fc\u30c9\u54c1\u8cea\u306e\u5411\u4e0a\u304c\u671f\u5f85\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":{"0":"post-1668","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-cpp","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1668","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1668"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1668\/revisions"}],"predecessor-version":[{"id":1669,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1668\/revisions\/1669"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1668"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1668"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}