- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我很确定库的这个 Poco 部分没有泄漏,但我也不知道为什么内存不断增加。
如果我让这个程序运行半分钟,ram 内存增加 10MB 以上,从不到 1 开始。
#include "Poco/Net/SSLManager.h"
int main(int argc, const char * argv[])
{
int counter = 0;
while(counter < 1000000)
{
Poco::Net::Context::Ptr context = new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "", Poco::Net::Context::VERIFY_NONE, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
counter++;
}
return 0;
}
我设置了一个断点来查看对象是否被删除,它确实删除了;
inline void RefCountedObject::release() const
{
if (--_counter == 0) delete this;
}
上面的代码来自上下文使用的 Foundation_API RefCountedObject 类。
我花了将近两天的时间试图理解为什么内存不断增加。用 Valgrind 测试,它说它确实会泄漏内存,但是在互联网上没有人提到这个。
在Ubuntu和Mac os x上也编译运行,同样的问题。
谢谢。
稍后编辑:在 mac os x 上运行 valgrind --leak-check=yes ./exec,输出如下:
==808== Memcheck, a memory error detector
==808== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==808== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==808== Command: ./exec
==808==
--808-- ./exec:
--808-- dSYM directory is missing; consider using --dsymutil=yes
--808-- /Users/myusername/bla/local/blaStream/blaStream/Libraries/libjson_linux-gcc-4.2.1_libmt.dylib:
--808-- dSYM directory is missing; consider using --dsymutil=yes
--808-- /Users/myusername/bla/local/blaStream/blaStream/Libraries/libboost_system-mt.dylib:
--808-- dSYM directory is missing; consider using --dsymutil=yes
--808-- /Users/myusername/bla/local/blaStream/blaStream/Libraries/libboost_thread-mt.dylib:
--808-- dSYM directory is missing; consider using --dsymutil=yes
UNKNOWN __pthread_sigmask is unsupported. This warning will not be repeated.
==808==
==808== HEAP SUMMARY:
==808== in use at exit: 72,981 bytes in 1,029 blocks
==808== total heap usage: 305,673 allocs, 304,644 frees, 11,304,653 bytes allocated
==808==
==808== 72 (32 direct, 40 indirect) bytes in 1 blocks are definitely lost in loss record 73 of 131
==808== at 0x47F1: malloc (vg_replace_malloc.c:300)
==808== by 0x8294F3: CRYPTO_malloc (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x80BEDB: sk_new_null (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x81EE87: engine_cleanup_add_last (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x7FFD4E: ENGINE_add (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x87FF55: ENGINE_load_dynamic (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x83180C: OPENSSL_config (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x1152669: Poco::Crypto::OpenSSLInitializer::initialize() (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoCrypto.16.dylib)
==808== by 0xFC6DE: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808== by 0xFC67F: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808== by 0x100027ADB: main (in ./exec)
==808==
==808== 904 (176 direct, 728 indirect) bytes in 1 blocks are definitely lost in loss record 100 of 131
==808== at 0x47F1: malloc (vg_replace_malloc.c:300)
==808== by 0x8294F3: CRYPTO_malloc (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x825CE5: lh_new (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x83AAC2: def_get_class (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x83A4E8: int_new_ex_data (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x81EBFE: ENGINE_new (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x87FEBA: ENGINE_load_dynamic (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x83180C: OPENSSL_config (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x1152669: Poco::Crypto::OpenSSLInitializer::initialize() (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoCrypto.16.dylib)
==808== by 0xFC6DE: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808== by 0xFC67F: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808== by 0x100027ADB: main (in ./exec)
==808==
==808== 1,536 (176 direct, 1,360 indirect) bytes in 1 blocks are definitely lost in loss record 119 of 131
==808== at 0x47F1: malloc (vg_replace_malloc.c:300)
==808== by 0x8294F3: CRYPTO_malloc (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x825CE5: lh_new (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x87E33D: int_thread_get (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x87E54A: int_thread_set_item (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x87DE34: ERR_get_state (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x85DF4B: ERR_clear_error (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x83180C: OPENSSL_config (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x1152669: Poco::Crypto::OpenSSLInitializer::initialize() (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoCrypto.16.dylib)
==808== by 0xFC6DE: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808== by 0xFC67F: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808== by 0x100027ADB: main (in ./exec)
==808==
==808== 2,048 bytes in 1 blocks are definitely lost in loss record 120 of 131
==808== at 0x51C7: calloc (vg_replace_malloc.c:627)
==808== by 0xC9100A: strerror (in /usr/lib/system/libsystem_c.dylib)
==808== by 0x853C87: ERR_load_ERR_strings (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x872388: ERR_load_crypto_strings (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x7C5DC8: SSL_load_error_strings (in /usr/lib/libssl.0.9.8.dylib)
==808== by 0x1152673: Poco::Crypto::OpenSSLInitializer::initialize() (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoCrypto.16.dylib)
==808== by 0xFC6DE: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808== by 0xFC67F: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808== by 0x100027ADB: main (in ./exec)
==808==
==808== 21,728 (32 direct, 21,696 indirect) bytes in 1 blocks are definitely lost in loss record 131 of 131
==808== at 0x47F1: malloc (vg_replace_malloc.c:300)
==808== by 0x8294F3: CRYPTO_malloc (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x80BEDB: sk_new_null (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x867092: CONF_module_add (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x82C5C8: OPENSSL_load_builtin_modules (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x831807: OPENSSL_config (in /usr/lib/libcrypto.0.9.8.dylib)
==808== by 0x1152669: Poco::Crypto::OpenSSLInitializer::initialize() (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoCrypto.16.dylib)
==808== by 0xFC6DE: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808== by 0xFC67F: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808== by 0x100027ADB: main (in ./exec)
==808==
==808== LEAK SUMMARY:
==808== definitely lost: 2,464 bytes in 5 blocks
==808== indirectly lost: 33,184 bytes in 639 blocks
==808== possibly lost: 0 bytes in 0 blocks
==808== still reachable: 264 bytes in 3 blocks
==808== suppressed: 37,069 bytes in 382 blocks
==808== Reachable blocks (those to which a pointer was found) are not shown.
最佳答案
可能是由于 this issue ; fix将在 1.6.0
关于c++ - 内存不断增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26768734/
如果这不是一个错误,那就是另一个错误。如果不是那样的话,那就是别的东西了。我觉得我的项目已经改变了很多,现在只是试图解决代码签名问题,结果一切都搞砸了。我严格按照说明进行操作,但出现错误,例如当前的“
我不确定是否有一些我不知道的内置变量或规则,或者 make 是否有问题,或者我只是疯了。 对于我的一个项目,我有一个如下的 makefile: CC=g++ CFLAGS=-O3 `libpng-co
我有大约 10 个 div,它们必须不断翻转,每个 div 延迟 3 秒 这个 codrops 链接的最后一个效果是我正在寻找的,但无需单击 div http://tympanus.net/Devel
我如何使用 jQuery 持续运行 PHP 脚本并每秒获取响应,以及将鼠标上的少量数据发送到同一脚本? 我真的必须添加一些随机扩展才能让这么简单的计时器工作吗? 最佳答案 To iterate is
JBoss 4.x EJB 3.0 我见过如下代码(大大简化): @Stateless @TransactionAttribute(TransactionAttributeType.NOT_SUPPO
使用 PHPStorm,我试图忽略每次尝试进行 git 提交时 pop 的 workspace.xml。 我的 .gitignore 看起来像: /.idea/ .idea/workspace.xml
我是一名优秀的程序员,十分优秀!