小编Ira*_*d K的帖子

在C中自动释放堆栈变量

不幸的是,在C中没有任何智能指针..但是有可能构建一个宏来包装变量声明并在离开声明变量的范围时使用该变量作为输入变量调用函数调用吗?

很抱歉这个长短语,但我正在使用xnu内核,你有许多内置引用计数器的元素,并且一定不要忘记在使用它时不用这个元素来避免内存泄漏.

例如,如果我有以下类型proc_t:

struct proc;
typedef struct proc * proc_t;
Run Code Online (Sandbox Code Playgroud)

我想在范围内基于此类型声明堆栈变量,例如:

{
    proc_t_release_upon_exit proc_t proc_iter = proc_find(mypid);
    //the rest of the code in this scope 
}
Run Code Online (Sandbox Code Playgroud)

在预处理器分析宏之后和编译之前,我希望生成以下代码:

{ 
    proc_t myproc = proc_find(mypid)
    //the rest of the code in scope
    proc_rele(myproc);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在C中定义这样的宏?

c variables macros

32
推荐指数
2
解决办法
2523
查看次数

对范围项目使用std :: set容器

我想将一堆范围项存储在std::set容器中。

通过重载比较,std::set以便使用该set::find方法检查集合中的项目之一是否包含输入范围参数,此数据结构应提供快速决策,以确定该集合当前保存的范围之一所包含的特定输入范围。

它还应支持代表单个点的范围项目(start_range == end_range)。

这是我的实现:

#include <iostream>
#include <map>
#include <set>
using std::set;
using std::map;

class range : public std::pair<int,int>
{
public:
    range(int lower, int upper)
    {
        if (upper < lower)
        {
           first = upper;
           second = lower;
        }
        else
        {
           first = lower;
           second = upper;
        }
    }
    range(int val)
    {
        first = second = val;
    }
    bool operator<(range const & b) const
    {
        if (second < b.first)
        {
            return true;
        } …
Run Code Online (Sandbox Code Playgroud)

c++ std set data-structures

10
推荐指数
2
解决办法
643
查看次数

启动产生新进程的流程

我正在研究launchd从plist文件下/Library/LaunchDaemons/或通过命令加载它的服务的方式launchctl load

到目前为止,我已经设法收集了一些不同的来源,并按照我的理解组成了以下模糊的图片:

在服务加载时 ( launchctl load) 进程launchctl向launchd发送一条适当的XPC消息,然后将launchd其分叉到具有上下文的新进程中xpcproxy。这个通用进程正在等待来自 的另一个 XPC 调用launchd以根据 launchDaemon plst 运行它的真实进程上下文。

这个解释听起来对吗?也许有人可以帮我使它更准确?

谢谢

macos xpc launchd mach

1
推荐指数
1
解决办法
455
查看次数

标签 统计

c ×1

c++ ×1

data-structures ×1

launchd ×1

mach ×1

macos ×1

macros ×1

set ×1

std ×1

variables ×1

xpc ×1