小编dla*_*ila的帖子

哪个更快:堆栈分配或堆分配

这个问题可能听起来相当简单,但这是我与另一位与我合作的开发人员的辩论.

我正在小心处理堆栈分配的东西,而不是堆分配它们.他正在跟我说话,看着我的肩膀并评论说这没有必要,因为他们的表现是明智的.

我一直认为堆栈的增长是恒定的时间,并且堆分配的性能取决于堆的当前复杂性(用于找到合适大小的孔)和解除分配(折叠孔以减少碎片,如如果我没有弄错的话,许多标准库实现在删除期间需要时间来完成此操作.

这让我觉得可能非常依赖于编译器.特别是对于这个项目,我使用Metrowerks编译器来实现PPC架构.对这种组合的洞察力将是最有帮助的,但总的来说,对于GCC和MSVC++,情况如何?堆分配不如堆栈分配高吗?没有区别吗?或者差异是如此微小,它变得毫无意义的微优化.

c++ memory heap performance stack

489
推荐指数
13
解决办法
12万
查看次数

如何编组多维数组

我们有一些涉及矩阵的互操作代码.我试图调用本机DLL,并且在大多数情况下它的工作非常可靠.

我依赖.net默认编组,避免使用非托管指针,而不是大部分使用.net数组,也许是byref在这里和那里..net文章说,多维数组被隐式编组为列主要的一维数组,这很好.

唯一似乎不起作用的是尝试编组多维数组,因为F#编译器抱怨声明中float[,]不允许这样做extern.这种限制有什么办法吗?

我知道F#PowerPack的类型PinnedArrayPinnedArray2类型,但我一直在寻找依赖于托管指针的解决方案 - 更重要的是 - 我希望避免将F#PowerPack作为依赖项包含在PinnedArray类中.

.net f# marshalling multidimensional-array

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

我的嵌入式python stdout在哪里?

考虑以下MWE:

#include <Python.h>
#include <stdio.h>

int main(void) {
  printf("Test 1\n");
  Py_Initialize();
  printf("Test 2\n");
  PyRun_SimpleString("print('Test 3')");
  printf("Test 4\n");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我正常编译并运行时,我得到预期的输出:

$ ./test
Test 1
Test 2
Test 3
Test 4
Run Code Online (Sandbox Code Playgroud)

但是当我重定向输出时,我从python代码中得不到任何东西:

$ ./test | cat
Test 1
Test 2
Test 4
Run Code Online (Sandbox Code Playgroud)

怎么了?更重要的是,如何将我的python输出写入stdout,如预期的那样?

python python-embedding python-3.4

14
推荐指数
2
解决办法
542
查看次数

boost可选和std :: experimental可选赋值之间的区别

通常,当一个函数返回时,boost::optional我看到很多人返回一个空括号{}来指定一个空值,这样可以正常运行并且比返回时更短boost::none.

我尝试做类似于清空a的操作boost::optional<int>,但是当在右侧调用带有空括号的复制赋值运算符(或者很可能是移动赋值操作)时,空括号将转换为int,然后将该值赋值给可选的,所以我最终将变量设置为0而不是我期望的空值.这是一个示例https://godbolt.org/g/HiF92v,如果我尝试相同的,std::experimental::optional我得到我期望的结果(只是用示例中的std :: experimental :: optional替换,你会看到指令成为mov eax, eax).

另外,如果我尝试使用不同的模板参数进行boost可选(非整数类型),一些编译器会编译(使用我期望的行为,这里有一个示例http://cpp.sh/5j7n)而其他编译器则没有.因此,即使对于相同的lib,根据模板arg,行为也是不同的.

我想了解这里发生了什么,我知道这与我使用C++ 14功能的一个事实有关,这个库没有考虑到它进入设计.我读了boost/optional标题,但我迷失了细节,我也尝试研究编译的代码,而没有内联类似的结果.

我正在使用gcc 4.9.2和-std = c ++ 14并且提升1.57.

顺便说一句:我知道我应该使用boost::optional::resetboost::none,但我试图与其余代码库中的语义保持一致.

c++ boost boost-optional gcc4.9 c++14

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

表达式树数据结构

我想在c ++中实现一个简单的算术表达式树数据结构,这样表达式树对象可以通过以下方式初始化:ExprTree(operator, expression1, expression2).以下是它应该如何工作的示例:

double x = 1, y = 2, z = 0.5;
expr1 = ExprTree('*', x, y); // expr1 = 1 * 2 = 2
expr2 = ExprTree('-', expr1, z); // expr2 = (1 * 2) - 0.5 = 1.5
cout << expr2.str() << endl; // ((1 * 2) - 0.5)
cout << expr2.eval() << endl; // 1.5
Run Code Online (Sandbox Code Playgroud)

这是我的代码到目前为止的样子:

template<class operand_type>
class ExprTree
{
public:
    ExprTree(const char op_, operand_type& operand1_, operand_type& operand2_)
    {
        op = op_; …
Run Code Online (Sandbox Code Playgroud)

c++ tree expression class

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

使用正则表达式进行全字匹配

我想要一个 C++ 正则表达式,它匹配“bananas”或“pyjamas”,但不匹配“bananas2”、“bananaspajamas”或“banana”或基本上除了这两个单词之外的任何内容。所以我这样做了:

#include <regex>

int main(int argc, char** argv) {
  static const std::regex bp = std::regex("\bbananas\b|\bpajamas\b");
  printf("%d\n", std::regex_match("bananas", bp));
}
Run Code Online (Sandbox Code Playgroud)

除了打印0!是什么赋予了?/\bbananas\b|\bpajamas\b/.test('bananas')给我的true是 Javascript 那么 C++ 有什么不同呢?

c++ regex c++11

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

lambda的生命周期捕获了const lambdas中的引用

我有以下api:

old_operation(stream, format, varArgs);
Run Code Online (Sandbox Code Playgroud)

我想写一个适配器,使编写调用成为可能,如下所示:

stream << operation(format, varArgs);
Run Code Online (Sandbox Code Playgroud)

为此,我使用一个临时对象,它存储对varArgs的引用并重载operator<<以应用old_operation()如下:

template<typename ...T>
decltype(auto) storage(T&& ...t) {
   return [&](auto&& f) ->decltype(auto) {
       return std::forward<decltype(f)>(f)(t...);
   };
}

template<typename ...T>
class Operation
{
    using Storage = decltype(storage(std::declval<T>()...));
    public:
       template<typename ...Args>
       explicit Operation(Args&& ...args) : 
               mArgs(storage(std::forward<Args>(args)...)) {};
       template<class StreamType>
       StreamType& Apply(StreamType& stream)
       {
           auto f = [&](auto&& ...xs)
           {
               old_operation(stream, std::forward<decltype(xs)>(xs)...);
           }
           mArgs(f);
           return stream;
       }
   private:
       Storage mArgs;
};

template<typename ...Args>
Operation<Args...> MakeOperation(Args&&... args)
{
    return Operation<Args...>(std::forward<Args>(args)...);
}

template<class …
Run Code Online (Sandbox Code Playgroud)

c++ lambda const c++14

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

找到3D多边形的区域

给定矩阵nx3,表示3D空间中的n个点.所有点都在飞机上.飞机由它的法线和一个点放在它上面.是否有Matlab函数或任何Matlabby方法直接从矩阵中找到区域?

我试图做的是编写一个函数,首先计算n-gon的质心c.然后形成三角形:(1,2,c),(2,3,c),......,(n,1,c).计算他们的面积并总结.但后来我不得不按循环顺序组织多边形点,因为它们是无序的,我觉得很难.有一个简单的方法吗?

在Matlab中有一种更简单的方法可以在矩阵上调用某些函数吗?

matlab computational-geometry

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

结构体的静态初始化扩展结构

我试图找到一种方法来静态初始化一个扩展另一个结构的结构.

如果我在c ++中有一个结构:

struct aStruct {
    int a;
    int b;
};
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令静态初始化此实例:

aStruct aStructInst = { 1, 2 };
Run Code Online (Sandbox Code Playgroud)

如果我想要一个子对象来存储其他信息,我也可以扩展这个结构:

struct bStruct : aStruct {
    int c;
};
Run Code Online (Sandbox Code Playgroud)

有没有办法静态初始化一个实例bStruct?我尝试了一些变化,但没有运气.静态初始化在我的用例中非常重要,可以将(全部)数据保存在RAM之外,这是非常有限的(嵌入式应用程序).

c++

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

双星号

我是Python新手,真的很难过.我正在读一本书,代码工作得很好; 我只是不明白!

T[i+1] = m*v[i+1]ˆ**/L
Run Code Online (Sandbox Code Playgroud)

这段代码的双星号部分是什么?它甚至出现了正斜杠.变量L初始化为值1.0但是,看起来有人瘫倒在键盘上,但代码工作正常.这是一个数学表达还是更多的东西?我很感激帮助理解这一点.谢谢!

完整代码:

from pylab import *
g = 9.8 # m/sˆ2
dt = 0.01 # s
time = 10.0 # s
v0 = 2.0 # s
D = 0.05 #
L = 1.0 # m
m = 0.5 # kg
# Numerical initialization
n = int(round(time/dt))
t = zeros(n,float)
s = zeros(n,float)
v = zeros(n,float)
T = zeros(n,float)
# Initial conditions
v[0] = v0
s[0] = 0.0
# Simulation loop
i = 0
while (i<n …
Run Code Online (Sandbox Code Playgroud)

python

4
推荐指数
2
解决办法
1258
查看次数