• <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

            ?

            色综合久久综合中文综合网| 久久精品二区| 99久久人妻无码精品系列蜜桃| 久久99精品久久久久子伦| 国产精品久久久久jk制服| 国产精品激情综合久久| 97精品伊人久久久大香线蕉 | 国产精品一区二区久久不卡| 99久久精品免费看国产免费| 少妇人妻综合久久中文字幕| 国内精品久久久久影院优| 精品久久人人做人人爽综合| 色综合久久中文字幕无码| 久久久久婷婷| 99久久综合国产精品二区| 亚洲av成人无码久久精品 | 久久91精品久久91综合| 日本加勒比久久精品| 久久中文字幕一区二区| 亚洲午夜久久久久久久久电影网| 久久久久国色AV免费观看| 精品一区二区久久| 人妻无码αv中文字幕久久琪琪布| 久久中文字幕无码专区| 一本久久久久久久| 青青草国产成人久久91网| 99久久国产热无码精品免费| 国内精品九九久久精品| 一级女性全黄久久生活片免费 | 亚洲狠狠婷婷综合久久久久| 久久人人爽人爽人人爽av| 亚洲综合婷婷久久| 999久久久国产精品| 99精品久久久久久久婷婷| 久久精品一区二区| 国产成人无码精品久久久久免费 | 人妻丰满AV无码久久不卡| 久久人人添人人爽添人人片牛牛| 亚洲国产精品成人AV无码久久综合影院 | 亚洲精品乱码久久久久久自慰| 精品久久久久久久国产潘金莲|