• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            在使用OpenSSL的RSA加解密的時候,發現RSA_new()初始化和RSA_free()釋放RSA結構體后依然會有內存泄漏。網上Baidu、Google之,發現這個相關信息很少(至少中文搜索結果是這樣,不知是研究這個的人太少還是這個太基礎了。。。),最后終于在某個E文論壇上找到了解決辦法。在這里總結了一下,供大家參考。我的OpenSSL版本是0.9.8l。

            具體如下:
            RSA * rsa = RSA_new();
            RSA_free( rsa );

            產生內存泄漏:

            Debug for memory leaks
            Detected?memory?leaks!
            Dumping?objects?-
            >
            {
            140 }?normal?block?at? 0x003B97A0 , ? 12 ?bytes?long .
            ?Data:?
            < ?? ; ????????? > ?B8? 96 ?3B? 00 ? 00 ? 00 ? 00 ? 00 ? 06 ? 00 ? 00 ? 00 ?
            {
            139 }?normal?block?at? 0x003B9750 , ? 16 ?bytes?long .
            ?Data:?
            < ???????????????? > ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ?
            {
            138 }?normal?block?at? 0x003B9700 , ? 20 ?bytes?long .
            ?Data:?
            < ????P? ; ????????? > ? 00 ? 00 ? 00 ? 00 ? 50 ? 97 ?3B? 00 ? 00 ? 00 ? 00 ? 00 ? 04 ? 00 ? 00 ? 00 ?
            {
            137 }?normal?block?at? 0x003B96B8 , ? 12 ?bytes?long .
            ?Data:?
            < ?????? ; ????? > ? 06 ? 00 ? 00 ? 00 ? 00 ? 97 ?3B? 00 ? 00 ? 00 ? 00 ? 00 ?
            {
            136 }?normal?block?at? 0x003B9638 , ? 64 ?bytes?long .
            ?Data:?
            < ???????????????? > ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ? 00 ?
            {
            135 }?normal?block?at? 0x003B9598 , ? 96 ?bytes?long .
            ?Data:?
            < 8 ? ; ???A???A????? > ? 38 ? 96 ?3B? 00 ?C0?FD? 41 ? 00 ?B0?FD? 41 ? 00 ? 08 ? 00 ? 00 ? 00 ?
            Object?dump?complete
            .

            ?

            解決方法很簡單:

            調用OpenSSL的crypto庫,在退出前需要調用API "CRYPTO_cleanup_all_ex_data",清除管理CRYPTO_EX_DATA的全局hash表中的數據,避免內存泄漏。如下:

            RSA * rsa = RSA_new();
            RSA_free( rsa );
            CRYPTO_cleanup_all_ex_data();?

            這樣就沒有內存泄漏了。

            ?

            需要注意的是,CRYPTO_cleanup_all_ex_data()不能在potential race-conditions條件在調用(不太懂這個術語,我理解的意思是當函數外部存在RSA結構體的時候,在函數內部執行CRYPTO_cleanup_all_ex_data()將導致函數外的RSA結構體也被清理掉),因此最好在程序結束的時候才調用。

            關于CRYPTO_cleanup_all_ex_data()的注釋說明和代碼如下:

            /* ?Release?all?"ex_data"?state?to?prevent?memory?leaks.?This?can't?be?made
            ?*?thread-safe?without?overhauling?a?lot?of?stuff,?and?shouldn't?really?be
            ?*?called?under?potential?race-conditions?anyway?(it's?for?program?shutdown
            ?*?after?all).?
            */
            void ?CRYPTO_cleanup_all_ex_data( void )
            ????{
            ????IMPL_CHECK
            ????EX_IMPL(cleanup)();
            ????}

            ?

            同樣,其他相應的模塊也需要在使用后清理:

            CONF_modules_unload( 1 );???????? // for?conf
            EVP_cleanup();????????????????? // For?EVP
            ENGINE_cleanup();?????????????? // for?engine
            CRYPTO_cleanup_all_ex_data();?? // generic?
            ERR_remove_state( 0 );??????????? // for?ERR
            ERR_free_strings();???????????? // for?ERR

            ??http://www.cnblogs.com/moonset7/archive/2009/12/30/1635770.html

            ?

            精品999久久久久久中文字幕| 精品久久久久久无码人妻热| 久久婷婷成人综合色综合| 久久久www免费人成精品| 97久久香蕉国产线看观看| 欧美色综合久久久久久| 色狠狠久久综合网| 久久精品一区二区国产| 18禁黄久久久AAA片| 久久久久四虎国产精品| 久久久久人妻一区二区三区| 国产精品伊人久久伊人电影| 久久久亚洲AV波多野结衣| 九九热久久免费视频| 国产精品9999久久久久| 亚洲日本va午夜中文字幕久久| 久久九九全国免费| 国产精品久久国产精麻豆99网站 | 丰满少妇人妻久久久久久4| 亚洲日本va午夜中文字幕久久| 久久久久久a亚洲欧洲aⅴ | 久久久久久国产a免费观看黄色大片 | 久久久久久午夜成人影院| 精品久久久久久久久免费影院 | 性做久久久久久久久老女人| 久久精品中文闷骚内射| A级毛片无码久久精品免费| 亚洲国产精品综合久久网络 | 青青草国产97免久久费观看| 99久久精品无码一区二区毛片| 97久久天天综合色天天综合色hd| 久久午夜羞羞影院免费观看| 久久亚洲私人国产精品| 色综合久久久久久久久五月| 人妻精品久久无码区| 久久精品www人人爽人人| 国产V亚洲V天堂无码久久久| 成人国内精品久久久久一区| 91久久精品91久久性色| 一级做a爰片久久毛片人呢| 国产精品伊人久久伊人电影|