微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Botan内部使用的内存未释放

如何解决Botan内部使用的内存未释放

我目前在Botan库(版本2.15)中使用内存问题来解决C ++项目中的加密功能。我的开发环境是solus Linux 4.1(当前内核),但是我也可以在Debian Buster上观察到此问题。

我观察到,超出范围时,Botan内部分配用于计算的某些内存不会被释放。当我多次调用Botan::HashFunctionBotan::StreamCipherBotan::scrypt时,两者之间总是超出范围,因此内存占用量稳定增长。

例如,考虑以下代码

#include <iostream>
#include <vector>

#include "botan/scrypt.h"


void pause() {
    char ch;
    std::cout << "Insert any key to proceed... ";
    std::cin >> ch;
}


std::vector<uint8_t> get_scrypt_passhash(std::string const& password,std::string const& name) {

    std::vector<uint8_t> key (32);
    Botan::scrypt(key.data(),key.size(),password.c_str(),password.length(),salt.c_str(),salt.length(),65536,32,1);

    std::cout << "From function: before closing.\n";
    pause();

    return key;
}


int main(int argc,char *argv[]) {

    std::cout << "Beginning test.\n";
    pause();

    auto pwhashed = get_scrypt_passhash(argv[1],argv[2]);

    std::cout << "Test ended.\n";
    pause();
}

我使用pause()函数来观察内存消耗(我叫top / pmap并在暂停期间观察到KSysGuard),在终止之前从get_scrypt_passhash内部调用时,使用的内存(两者都(由top / pmap和KSysGuard提供)比开始时和终止后大约多2 MB。

我试图深入研究Botan源代码,但是找不到内存泄漏等问题。 Valgrind还输出所有分配的字节已被释放,因此不会发生内存泄漏。 仅供参考,我尝试使用Crypto ++进行相同的功能,而没有观察到这种行为。

有人遇到过同样的问题吗?有办法解决吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。