资源泄漏与否(Mac OS X)
Resource leak or not (Mac OS X)?
我正在尝试枚举Mac OS上的本地用户。它工作正常,但我认为有一些资源泄漏。我无法理解。分析显示没有内存泄漏,但内存使用量不断增长(内存报告XCode的图表)。在我的情况下,从 2.7M 到 4.9M(5 * 1000 次迭代)。谁能说我的代码有什么问题。是否有任何泄漏或行为正常?
这是一个简单的 c++ 命令行工具项目使用具有默认构建设置的 Objective-c 代码 (XCode 5):
/////////////////////////////////////////////
// main.cpp
#include "test.h"
#include <iostream>
#include <thread>
int main(int argc, const char * argv[])
{
//for (int i = 0; i < 1000; ++i)
for (int i = 0; i < 5; ++i)
{
std::cout << "Iteration # " << i << std::endl;
for (int j = 0; j < 1000; ++j)
{
Execute();
}
std::this_thread::sleep_for(std::chrono::seconds(1));
}
return 0;
}
/////////////////////////////////////////////
// test.mm
#import <Collaboration/Collaboration.h>
#import <CoreServices/CoreServices.h>
#import <Foundation/Foundation.h>
#import <SystemConfiguration/SCDynamicStore.h>
#import <SystemConfiguration/SCDynamicStoreCopySpecific.h>
#include <iostream>
void Execute()
{
CSIdentityAuthorityRef identityAuthority = CSGetLocalIdentityAuthority();
if (!identityAuthority)
{
std::cout << "Failed to get identity authority." << std::endl;
return;
}
CSIdentityQueryRef usersQuery(CSIdentityQueryCreate(nil, kCSIdentityClassUser, identityAuthority));
if (!usersQuery)
{
std::cout << "Failed to create query." << std::endl;
return;
}
/////////////////////////////////////////////////
// Without CSIdentityQueryExecute(usersQuery, 0, nil) - everething is ok.
/////////////////////////////////////////////////
if (!CSIdentityQueryExecute(usersQuery, 0, nil))
{
std::cout << "Failed to execute query." << std::endl;
return;
}
CFRelease(usersQuery);
}
#ifndef __MY_TEST_H__
#define __MY_TEST_H__
void Execute();
#endif
尝试在每次return
之前执行CFRelease
,因为某些迭代不会释放数据。
我刚刚运行了这个程序,我没有看到任何内存增长。我稍微简化了它,使其成为一个单文件C++程序(目前它是C++和ObjC ++的混合体)。
您确实有内存错误,但我只希望在您遇到错误时导致泄漏。此块泄漏查询:
if (!CSIdentityQueryExecute(usersQuery, 0, nil))
{
std::cout << "Failed to execute query." << std::endl;
return;
}
您不应该在这里返回(技术上您不需要),或者您应该在返回之前附上CFRelease(usersQuery)
。但同样,如果这是问题所在,您会看到大量"无法执行查询"日志消息。
相关文章:
- libprotobuf 检查在 Mac OS 上执行程序时失败
- C++读取用户输入而不按回车键(Mac OS X),与Turbo Pascal中的读取键相同
- 如何在 MAC OS c/c++ 中阻止 USB 存储设备
- Mac os x app bundle 在下载并运行时崩溃,但在终端或更改 Info.plist 时运行良好
- const 如何防止写入特定内存 [Clang, Mac OS]
- 如何在 Mac OS 上安装 boost-mpi 及其对 clang 的依赖关系?
- 在 Mac OS 中将 QT 与 CMAKE 集成
- Homebrew OS X OpenCV - 在另一台Mac上运行时寻找dylib
- 从我的2d数组中的一列返回的字符串值被压缩为一个字符串(在Mac os上打开Windows txt文件)
- VK_ERROR_INCOMPATIBLE_DRIVER with Mac OS and Vulkan MoltenVK
- 我无法在C++(Clion,Mac OS)中运行Gurobi
- 如何在Mac OS的发布版本中包含Qt库?
- 如何将C++项目从 32 位迁移到 64 位以支持 MAC OS 10.14(莫哈韦)?
- 在 Mac OS x 中制造期间出现错误未知类型名称"constexpr"
- 无法在 Mac OS X 上链接静态资源库
- 在Mac OS X Mountain Lion(或更高版本)和Linux上使用X11/Xlib.h
- Mac OS c++ Link OpenCV and libtiff
- 使用 c++ 在 Mac OS X 上启动"new email"窗口
- 在 Mac OS 上运行 x11
- 为什么 Mac OS 指定的 TCP 端口不侦听?