小编Jak*_* S.的帖子

Visual Studio中unordered_map的神秘行为

我想在VS2010 C++下的索引double处存储~3,000,000个值unsigned int.我用它std::tr1:unordered_map<unsigned int, double>来达到这个目的.不幸的是,当我尝试存储值2 ^ 21时,会抛出异常(就好像只有2 ^ 21-1的空间,即某些索引只能使用20位).我rehash在存储值之前尝试过,这也没有用.

最后,我最终得到了一些非常基本的测试程序(它表现出甚至有点不同的行为,但无论如何):

    std::tr1::unordered_map<unsigned int, float> mapOut;
    //mapOut.rehash(SOMESIZE);
    for (unsigned int i=0; i<3000000; i++)
    {
        if (i%1000==0) std::cout << i << std::endl;
        mapOut[i] = 0.0;
    }
Run Code Online (Sandbox Code Playgroud)

我查了一些案例:

1)如果我根本不重新进行,则程序在输出后根据i == 32000(最终2 ^ 15)进行长时间休息,然后继续i == 262000(2 ^ 18).它永远存在(100%CPU负载,内存不增加).

2)如果我做了rehash(1000),它来到i == 65000(2 ^ 16)并永远保持(CPU负载100%,内存不增加).

3)如果我这样做rehash(3000000),循环成功完成,但程序永远不会退出 - 即,显然析构函数存在一些问题.

那里发生了什么,更重要的是:我该怎么办呢?!

非常感谢您的帮助!

c++ unordered-map visual-studio-2010

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

Wix:显示条件消息框而不取消

是否有某种方式显示消息框由于某些条件但继续安装?

如果他有更少的内存,我想通知用户有关建议的内存量.

如果我使用

<Condition Message="For running $(var.ProductName), 4GB of physical memory are recommended.">
    <![CDATA[PhysicalMemory > 3500]]>
</Condition>
Run Code Online (Sandbox Code Playgroud)

RAM少于4GB的计算机上的安装不成功.

我怎么能避免这个?

谢谢你的帮助!

wix

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

分配大块连续内存 - 做或不做?

我一直相信分配大块连续内存不是一个好习惯.显然,如果内存碎片发挥作用,您可能会遇到麻烦,在大多数情况下无法将其排除在外(特别是在设计为服务等的大型项目中).

最近,我来到ITK图像处理库并意识到,他们(实际上)总是将图像数据(甚至3D - 可能很大)分配为一个连续的块.我被告知这应该不是问题,至少对于64位进程而言.但是,我没有看到64位和32位进程之间存在系统性差异,除了由于更大的虚拟地址空间而导致内存问题可能会延迟.

要说明一点:我想知道在处理大量数据时有什么好的做法:简单地将其分配为一个大块,或者更好地将其分成更小的块进行分配?

由于问题当然是系统特定的,我想将其限制为原生(非托管,无CLR)C++,特别是在Windows下.但是,如果可能的话,我也会对任何更一般的评论感兴趣.

c++ memory-management

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

如何让doxygen预处理器进入子目录?

我没有让doxygen预处理器递归地包含文件.这该怎么做?

我编写了一个由两个头文件和一个Doxygen文件组成的例子:

subdir/example.h
subdir2/example_include.h
Doxygen
Run Code Online (Sandbox Code Playgroud)

这是列表example.h:

#include "example_include.h"

typedef struct
{
    float   array[ARRAY_LENGTH * 2 - 1];
#if CONDITION == MY_FALSE
    char        optional_char;
#endif
} ExampleType;
Run Code Online (Sandbox Code Playgroud)

这是列表example_include.h:

#define MY_FALSE            (0u)
#define MY_TRUE             (1u)
#define CONDITION       MY_TRUE
#define ARRAY_LENGTH    (20u)
Run Code Online (Sandbox Code Playgroud)

我对默认Doxygen配置文件(使用Doxygen 1.8.2)的更改是:

INPUT                  = .
RECURSIVE              = YES
GENERATE_XML           = YES
MACRO_EXPANSION        = YES
INCLUDE_PATH           = .
Run Code Online (Sandbox Code Playgroud)

Doxygen for ExampleType(file :)的输出XML xml/struct_example_type.xml是:

<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.2">
  <compounddef id="struct_example_type" kind="struct" prot="public">
    <compoundname>ExampleType</compoundname> …
Run Code Online (Sandbox Code Playgroud)

c doxygen

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

代码的模板类似但不相同?

我有一堆函数读取完全相同,除了一行代码,根据输入参数的类型不同.

例:

void Func(std::vector<int> input)
{
   DoSomethingGeneral1();
   ...
   DoSomethingSpecialWithStdVector(input);
   ...
   DoSomethingGeneral2();
}

void Func(int input)
{
   DoSomethingGeneral1();
   ...
   DoSomethingSpecialWithInt(input);
   ...
   DoSomethingGeneral2();
}

void Func(std::string input)
{
   DoSomethingGeneral1();
   ...
   DoSomethingSpecialWithStdString(input);
   ...
   DoSomethingGeneral2();
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何使用类似模板的机制来避免这种重复.如果我正确理解"专业化",它不会避免两次专用函数的代码?

c++ templates

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

C#中的Singleton在不在同一名称空间时"无法访问"?

我尝试以下列方式实现单例类(我使用VS2008 SP1):

namespace firstNamespace
{
   class SingletonClass
   {
      private SingletonClass() {}

      public static readonly SingletonClass Instance = new SingletonClass();
   }
}
Run Code Online (Sandbox Code Playgroud)

当我想从不同命名空间中的类访问它时(似乎这是问题,在它工作的同一命名空间中),如:

namespace secondNamespace
{
   ...
   firstNamespace.SingletonClass inst = firstNamespace.SingletonClass.Instance;
   ...
}
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误:

error CS0122: 'firstNamespace.SingletonClass' is inaccessible due to its protection level
Run Code Online (Sandbox Code Playgroud)

有人知道如何解决这个问题吗?

提前谢谢了!

c# singleton namespaces compiler-errors visual-studio-2008-sp1

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

在非托管C++代码中使用C#属性

我们有一个大型项目,主要用C#编写(服务,多线程等).但是,核心数字运算算法是用非托管C++编写的,速度很快(OpenMP等).

不幸的是,目前我们必须做出很多努力来在这两个世界之间交换数据.即,我们必须在C++/CLI中为每个C++类编写包装类.对于(虚拟)C#中的任何所需设置(属性) - "world",在C++世界中有一个副本(头文件),并在包装​​类中来回显式转换.这种架构似乎非常低效且容易出错.

主要问题:有没有办法在非托管C++中以某种方式自动共享具有属性的C#类?(我们要读写!)

次要问题:如上所述,您能否就如何改进架构提出任何建议?我们的一个考虑是完全切换到C++,但是必须找到适当的库并为我们在.NET中所做的所有(系统)事情编写干净的代码并不是很好.

非常感谢你的帮助和最诚挚的问候,雅各布

c# c++ word-wrap

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

平均值取决于相对于第二变量的分箱

我正在使用python/numpy.作为输入数据,我有大量的值对(x,y).我基本上想要绘制<y>(x),即y某个数据仓的平均值x.目前我使用一个普通的for循环来实现这一点,这非常慢.

# create example data
x = numpy.random.rand(1000)
y = numpy.random.rand(1000)
# set resolution
xbins = 100
# find x bins
H, xedges, yedges = numpy.histogram2d(x, y, bins=(xbins,xbins) )
# calculate mean and std of y for each x bin
mean = numpy.zeros(xbins)
std = numpy.zeros(xbins)
for i in numpy.arange(xbins):
    mean[i] = numpy.mean(y[ numpy.logical_and( x>=xedges[i], x<xedges[i+1] ) ])
    std[i]  = numpy.std (y[ numpy.logical_and( x>=xedges[i], x<xedges[i+1] ) ])
Run Code Online (Sandbox Code Playgroud)

有可能为它进行一种矢量化写作吗?

python numpy

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

如何将数据从非托管代码推送到托管代码?

我正在使用C++/CLI Wrapper从C#框架( - >托管)访问纯C++库( - >非托管).我想构建一种机制,使C++库能够将有关其状态的信息推送到框架.根据我的理解,这意味着我必须在某些时候至少从非托管代码调用托管函数.这是可能的,我怎样才能做到这一点?

非常感谢您的帮助!

最好的问候,雅各布

unmanaged c++-cli managed

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

将 vtkPoints 转换为 numpy 数组?

我在 Python 脚本中使用 Mayavi2 来计算 3d 等值面。结果我得到了一个 vtkPoints 对象。现在我想将此 vtkPoints 对象(下面的代码示例中的“vtkout”)转换为一个简单的 numpy 数组,其中 3 行包含所有 x、y 和 z 值。我使用如下代码得到 vtkout:

import numpy
from enthought.mayavi import mlab
import array

randVol = numpy.random.rand(50,50,50)        # fill volume with some random potential
X, Y, Z = numpy.mgrid[0:50, 0:50, 0:50]      # grid
surf = mlab.contour3d(X, Y, Z, randVol, contours=[0.5])   # calc contour
vtkout = surf.contour.contour_filter.output.points        # get the vtkPoints object
Run Code Online (Sandbox Code Playgroud)

目前我使用以下代码将点提取到数组中:

pointsArray = numpy.zeros((3, vtkout.number_of_points))
for n in range(vtkout.number_of_points):
    pointsArray[0,n] = vtkout[n][0]
    pointsArray[1,n] = vtkout[n][1] …
Run Code Online (Sandbox Code Playgroud)

python numpy vtk

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

OpenCL中的和矢量分量(类似SSE)

是否有一条指令来计算a的所有组件的总和float4,例如,在OpenCL中?

float4 v;
float desiredResult = v.x + v.y + v.z + v.w;
Run Code Online (Sandbox Code Playgroud)

opencl

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

内存分配与交换(在Windows下)

对不起我的一般性问题,但我找不到明确的答案:

鉴于我有剩余的免费交换内存并且我以合理的块(~1MB)分配内存 - >内存分配是否因任何原因仍然失败?

windows swap bad-alloc

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