如何解决Botan内部使用的内存未释放
我目前在Botan库(版本2.15)中使用内存问题来解决C ++项目中的加密功能。我的开发环境是solus Linux 4.1(当前内核),但是我也可以在Debian Buster上观察到此问题。
我观察到,超出范围时,Botan内部分配用于计算的某些内存不会被释放。当我多次调用Botan::HashFunction
,Botan::StreamCipher
和Botan::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 举报,一经查实,本站将立刻删除。