小编Rob*_*bin的帖子

非自愿的上下文切换:我该如何预防?


我有一个小应用程序,我现在正在运行,我想检查是否有任何内存泄漏,所以我把这段代码:

for (unsigned int i = 0; i<10000; i++) {
    for (unsigned int j = 0; j<10000; j++) {
        std::ifstream &a = s->fhandle->open("test");
        char temp[30];
        a.getline(temp, 30);
        s->fhandle->close("test");
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,我cat'ed/proc // status以查看内存是否增加.运行约2分钟后输出如下:

Name:   origin-test
State:  R (running)
Tgid:   7267
Pid:    7267
PPid:   6619
TracerPid:  0
Uid:    1000    1000    1000    1000
Gid:    1000    1000    1000    1000
FDSize: 256
Groups: 4 20 24 46 110 111 119 122 1000 
VmPeak:   183848 kB
VmSize:   118308 kB
VmLck:         0 kB
VmHWM:      5116 kB …
Run Code Online (Sandbox Code Playgroud)

c++ linux memory-management

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

将脚本语言集成到C++应用程序中

我是C++的新手,我遇到了一个我无法通过阅读文档来解决的问题.

我想在我的c ++应用程序中嵌入一个脚本语言.该语言可以是javascript,lua或者最好是python.

我不是在寻找像Boost.Python/swig这样的东西,能够将我的c ++函数/类包装到python接口,而是一个python_evaluate_and_return_result_as_variable("my_code");函数.

我有一大堆包含几个整数的结构:

struct my_integers {
    int a;
    int b;
    int c;
    int d;
    int e;
};
Run Code Online (Sandbox Code Playgroud)

现在我想用这些整数做一些数学运算,例如:

i.a = i.c * i.e;
Run Code Online (Sandbox Code Playgroud)

我想要做的数学将来会发生很大变化,我需要其他人才能在不访问c ++代码的情况下更改数学.

我正在考虑这样的代码结构:

  1. 我初始化我的结构并用起始值填充它
  2. 我加载了一个外部python函数,让我们说"my_python_function",它将struct作为参数,并在返回之前对它进行数学运算.
  3. 我得到了我的结构 i = my_python_function_cppwrapper(i)

有可能吗?我搜索了很多内容,但我似乎唯一能找到的包装器提供了c ++ - > python(或其他方式)functionallity而没有真正与变量交互.


罗宾,我真的很感谢任何帮助.

c++ python scripting embedding

8
推荐指数
3
解决办法
6765
查看次数

C++文件容器(例如zip),方便访问

我有很多小文件需要与我构建的应用程序一起提供,我想将这些文件放入存档,以便更容易地复制和重新分发.我也非常喜欢将它们放在一个地方的想法所以我需要比较一个文件的md5,以防出现问题.

我正在考虑一个类,它可以加载存档并返回存档中的文件列表,并在需要访问时将文件加载到内存中.

我已经在互联网上搜索了实现我想要的不同方法,并了解了zlib和lzma sdk.两者都没有真正吸引我,因为我没有真正发现便携式zlib是如何,我不喜欢lzma sdk,因为它只是很多,我不想因为这个问题而炸毁应用程序.zlib的另一个缺点是我没有C/C++经验(我是C++的新手)来完成手册中解释的所有内容.

我还要补充一点,这是一个时间紧迫的问题.我有一段时间关于以某种方式实现像tar这样的简单格式,我可以轻松访问我的应用程序中的文件,但我还没有找到时间去做.

所以我正在寻找的是一个允许我访问档案中文件的库.如果有人能指出我正确的方向,我会很高兴.

谢谢,罗宾.

编辑:我需要在linux和windows下访问存档.对不起,我在开始时没有提到.

c++ zip archive

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

运行时值到类型映射

我有一个可以通过网络发送的类型列表,举个例子:

enum types {
    E_T1,
    E_T2,
    E_T3,
    E_T4
};
Run Code Online (Sandbox Code Playgroud)

现在我有对应于每种类型的类的列表,让我们说每一个被声明为class E_T1 {...},class E_T2 {...}等等.

它们不是来自共同的基类,也不可能这样做.每个类都有一个验证方法,我需要通过网络发送数据来调用.客户端发送数据D和ID对应于消息类型.我需要掌握与该类型对应的对象.如果需要,我可以使用C++ 0x功能.

到目前为止我所尝试的是使用专门的模板types,为与之相关的对象保存一个typedef.这显然是一个愚蠢的想法,因为模板参数需要编译时间常数,因此getType<data.id()>::type无法做一些事情.

然后我尝试使用Boost.Variant来获得这样的常见可返回类型(使用mpl向量来迭代runntime上的已注册类型以进行重新布局):

template <typename C>
struct getType() {
    typedef C type;
}

typedef boost::mpl::vector<
    getType<E_T1>,
    getType<E_T2>,
    getType<E_TX>...
> _types;

typedef boost::make_variant_over<_types>::type _type;

//use a map to store each type <-> id
boost::unorderd_map<types, _type> m;
m[E_T1] = getType<E_T1>();

m[data.id()]::type x; //<- access type, can now call x.validate(data)
Run Code Online (Sandbox Code Playgroud)

这个问题是每个默认情况下每个变体限制为20个条目.这可以被覆盖,但从我所理解的应该考虑每种类型的开销,我们在这里谈论几千种类型.

还尝试了boost.any,但它没有任何类型信息,所以再次出了问题.有谁有任何好的想法如何才能优雅地解决这个问题?寻找我无需在任何时候处理类型的情况下编写1k开关语句的东西.

所有类型都以编译类型命名,相应的ID也是如此.Id - >类型解析需要在运行时发生.

谢谢,罗宾.

c++ networking

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

获取树中定义的积分的总和和乘积

我在Haskell中了解如何处理以下内容时遇到一些问题:

假设我有类似这样的声明:

  • a*(b + c)
  • a +(b*c)
  • a +(b*(c + d))
  • a*(b +(c*d))
  • 等等

我想在树中表达这些语句并评估每个语句的结果,对于初学者我定义了以下数据结构:

data statement = Number Int 
               | Product statement statement 
               | Sum statement statement
               deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

对于要使用的示例树,我使用了以下函数:

a :: statement
a = Product (Number 2) (Sum (Number 5) (Number 1))
Run Code Online (Sandbox Code Playgroud)

现在我想构建一个函数treeResult,它给出了我定义的语句的结果,但我不知道如何处理这个问题.为上述语句返回的整数应为12.

我的第一个猜测是编写一个函数,它将"statement"作为参数并返回一个int,仅对于简单语句的starters.

treeResult :: statement -> Int
treeResult (Number a) = a
treeResult (Product (Number a) (Number b)) = a*b
treeResult (Sum (Number a) (Number b)) = a+b
Run Code Online (Sandbox Code Playgroud)

现在我知道我需要一些可以递归的东西,但我不知道如何在haskell中编写它,有人可以帮助我吗?

recursion haskell functional-programming expression-trees

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

访问/ proc

我当前正在开发一个需要大量系统和过程信息的应用程序,其中某些信息只能通过/ proc获得,并且我对访问结构有一些一般性问题。

该应用程序将在Linux(内核> = 2.6)上运行,而不是在任何其他Unix风格的OS上运行。它应该可以访问/ proc中的任何数据,由于规范尚不清楚,所以我现在不能说什么了,但是整个/ proc目录与应用程序有关。


首先:是否有一个很好的文档,涵盖了从内核版本到内核版本添加/删除的所有功能?我特别想知道的一件事是各个文件的格式。我可以认为这是理所当然的吗?它在内核版本之间变化吗?

连接基于内核的解析过程根本不是问题,只是我找不到关于版本之间变化的任何好的文档,这些文档可以帮助我预先捕获解析错误。


另外:是否存在可以通过内核选项激活/停用的功能的明确列表(当然/ proc-feature本身除外)?我正在寻找仅在内核中设置了适当选项的情况下存在的文件/目录的列表。

作为我正在考虑的示例,这是proc手册页(http://linux.die.net/man/5/proc)的链接,其中包含很多有用的信息,例如,某些选项包括最早的它们提供了内核版本,其中包括是否需要加载模块。但是,这并没有描述所有信息的输出格式,如果我想解析它,这是我所需要的(例如,如果它在所有内核版本中都是一致的,或者在某个时候已更改)。


我想知道的第二件事是,如果被查询的进程在被查询时死亡,将会发生什么。我的时间间隔是几点?例如,如果我要获取一列读取所有结构的进程列表,然后逐一解析它们,那么如果我的进程x在读取之前死了,会发生什么?即使我检查目录是否存在,也可以在以后的一个应用程序调用中消失。


最后但并非最不重要的一点:是否有没有安装proc的主要发行版?

据我了解,很多通用工具都基于/ proc接口,例如lsmodor free,所以我猜想我可以期望/ proc几乎总是存在。

linux kernel procfs

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

C++:动态访问类属性

我想知道是否可以动态访问类的属性而不知道在运行时访问的属性的名称.

为了让您更好地理解我的目标,这个PHP代码应该演示我想要做的事情:

<?php
$object = new object();
$property = get_name_out_of_textfile();
echo $object->$property;
?>
Run Code Online (Sandbox Code Playgroud)

我知道不可能做同样的事情,但是假设我在std :: string的cstring中得到了一个属性的名称,并希望访问与该名称匹配的属性.有没有办法做到这一点?

背景是我想从具有大量属性的类动态加载和保存数据.我可以保存我想要的任何格式,但我需要一种方法来重新加载它们,而不是每次都指定确切的属性.

在此先感谢任何帮助,罗宾.

c++ attributes templates dynamic-data

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