小编Dej*_*vić的帖子

如何使用valgrind与python?

我正在尝试memcheck我写的C python扩展,但是我在设置valgrind以使用python时遇到了麻烦.我真的很感激一些建议.仅供上下文使用,这是Ubuntu 13.10,python 2.7.5+和valgrind 3.8.1.

根据Readme.valgrind我的建议,我做了以下.

1)用.下载python源码

sudo apt-get build-dep python2.7
apt-get source python2.7
Run Code Online (Sandbox Code Playgroud)

2)应用代码补丁,即"在Objects/obmalloc.c中取消注释Py_USING_MEMORY_DEBUGGER".

3)应用抑制补丁,即"取消注释Misc/valgrind-python.supp中的行,以抑制PyObject_Free和PyObject_Realloc的警告"

4)编译python与

./configure --prefix=/home/dejan/workspace/python --without-pymalloc
make -j4 install
Run Code Online (Sandbox Code Playgroud)

请注意,我做了2和3,而README.valgrind说做2或3 ...更多不能伤害.

现在,让我们在一些示例python代码中对此进行测试 test.py

print "Test"
Run Code Online (Sandbox Code Playgroud)

让我们用这个脚本在python上运行valgrind

valgrind --tool=memcheck --leak-check=full --suppressions=python2.7-2.7.5/Misc/valgrind-python.supp bin/python test.py
Run Code Online (Sandbox Code Playgroud)

出乎意料的是,仍然有来自valgrind的大量报告,其中第一个报告(以及更多关注报告)

==27944== HEAP SUMMARY:
==27944==     in use at exit: 857,932 bytes in 5,144 blocks  
==27944==   total heap usage: 22,766 allocs, 17,622 frees, 4,276,934 bytes allocated
==27944== 
==27944== 38 bytes in 1 blocks are possibly lost in loss record 24 of 1,343
==27944== …
Run Code Online (Sandbox Code Playgroud)

python valgrind memory-leaks

45
推荐指数
2
解决办法
3万
查看次数

std :: sort没有复制结构

假设我有一个对象向量,其中:

  • 复制结构和作业很昂贵
  • 默认构造和交换两个对象很便宜.

对于引用大数据的对象来说,这似乎很标准 - 例如向量向量.

问题:有没有办法使用std::sort标准库中的某个或其他排序例程对此向量进行排序,以便不进行复制,而是使用交换?我正在寻找一个预c++0x解决方案(没有移动语义).

重载std::swap似乎是第一次自然尝试,它确实有点帮助,但它只消除了一小部分复制.

注意:gcc行为的示例

为了排序100 81 64 49 36 25 16 9 4 1 0 1 4 9 16 25 36 49 64 81,我的gcc std :: sort调用19个拷贝构造函数,92个赋值和6个交换.

c++ sorting standard-library

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

Z3可以用来预处理问题吗?

由于可用问题需要大量技巧和预处理技术与决策程序无直接关系,因此很多时候对SMT求解器进行新的研究.这些通常是未发表的或需要时间来适当地实施和优化,此外使得对不同解算器的比较和理解非常困难.

是否可以使用Z3作为预处理器来解决问题并将其转储为预处理形式(z3本身用来解决问题)?

我没有看到任何命令行选项,但我猜测可能有一些方法可以实现这一点,通过策略,通过python接口,甚至编写一些额外的代码.

python z3

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

为什么显式模板实例化的位置很重要

说我声明一个模板类Aa.h

#include <iostream>

template<bool b>
class A { 
public:
  void print(std::ostream& out);
};
Run Code Online (Sandbox Code Playgroud)

并确定在打印方法a.cpp(与明确的instatiation truefalse)

#include "a.h"

template<bool b>
void A<b>::print(std::ostream& out) {
  out << "A" << b;
}

template class A<true>;
template class A<false>;
Run Code Online (Sandbox Code Playgroud)

main.cpp可以是一个主要的主要程序示例

#include "a.h"

int main() {
  A<true> a;
  a.print(std::cout);
}
Run Code Online (Sandbox Code Playgroud)

上面的小项目编译得很好.

问题:如果我将显式实例化放在print方法(in a.cpp)的定义之上,则代码不再编译,并且通常会undefined reference to A<true>::print(...)出现错误.

#include "a.h"

template class A<true>;
template class A<false>;

template<bool b>
void A<b>::print(std::ostream& out) { …
Run Code Online (Sandbox Code Playgroud)

c++ templates explicit

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

GCC中结构变量的范围规则

考虑以下C程序

#include <stdio.h>

typedef struct s {
  int x;
} s_t;

int main() {
  int x;
  s_t a;

  scanf("%d", &x);

  if (x > 0) {
    s_t a;
    a.x = x;
  }

  printf("%d\n", a.x);
}
Run Code Online (Sandbox Code Playgroud)

a在If分支结构变量明确阴影的a主结构体变量.可以预期printf中的输出将是未定义的,但是对于GCC,范围变量似乎等于主变量.

例如

gcc test.c -o test
echo 10 | ./test
Run Code Online (Sandbox Code Playgroud)

将输出10.

另一方面,通过clang执行此操作,正如预期的那样

clang test.c -o test
echo 10 | ./test
Run Code Online (Sandbox Code Playgroud)

输出-2145248048.

这是一个GCC错误还是存在某种未触发的行为?

gcc 4.8.2 clang 3.4

c gcc struct clang scoping

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