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

            ?

            久久精品无码免费不卡| 伊人久久综合精品无码AV专区 | 久久这里只精品国产99热| 久久er99热精品一区二区| 久久免费美女视频| 亚洲一区精品伊人久久伊人| 久久精品中文闷骚内射| 久久久久夜夜夜精品国产| 伊人久久成人成综合网222| 中文字幕久久波多野结衣av| 狠色狠色狠狠色综合久久| 久久久久中文字幕| 亚洲欧美精品一区久久中文字幕| 精品熟女少妇AV免费久久| 国内精品伊人久久久久| 思思久久好好热精品国产| 色综合久久最新中文字幕| 日韩久久久久中文字幕人妻| 久久天堂电影网| 日韩久久久久久中文人妻| 精品久久国产一区二区三区香蕉| 久久影院综合精品| 亚洲?V乱码久久精品蜜桃| 91精品无码久久久久久五月天| 97精品依人久久久大香线蕉97| 国产日韩久久久精品影院首页| 天天爽天天狠久久久综合麻豆| 尹人香蕉久久99天天拍| 亚洲&#228;v永久无码精品天堂久久| 国内精品九九久久久精品| 伊人久久大香线焦AV综合影院| 色综合久久久久综合99| 久久久久久久久久免免费精品 | 国产一区二区精品久久岳| 色妞色综合久久夜夜| 久久国产精品一区二区| 久久人妻AV中文字幕| 国产A级毛片久久久精品毛片| 午夜人妻久久久久久久久| 97久久婷婷五月综合色d啪蜜芽 | 九九久久99综合一区二区|