小编Cra*_*rks的帖子

可以根据分配的对象的类型特征覆盖全局新运算符吗?

我正在尝试升级我们的池化固定块内存分配器以利用C++ 11类型特性.

目前,可以通过 以传统方式覆盖全局新运算符来强制将任何对象的任何分配分配到正确的池,例如,

void* operator new (std::size_t size) 
{ // if-cascade just for simplest possible example
   if ( size <= 64 ) { return g_BlockPool64.Allocate(); }
   else if ( size <= 256 ) { return g_BlockPool256.Allocate(); }
   // etc .. else assume arguendo that we know the following will work properly
   else return malloc(size);
}
Run Code Online (Sandbox Code Playgroud)

在许多情况下,如果可以根据类型特征将对象分派到不同的池中,我们可以进一步提高性能is_trivially_destructible.是否有可能使一个知道分配类型的模板化全局新运算符,而不仅仅是请求的大小?相当于的东西

template<class T>
void *operator new( size_t size)
{
  if ( size < 64 ) 
  {  return …
Run Code Online (Sandbox Code Playgroud)

c++ type-traits c++11

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

ANTLR解析器生成器最适合具有受限内存的C++应用程序吗?

我正在寻找一个很好的解析器生成器,我可以用它来读取我们的大型商业应用程序中的自定义文本文件格式.目前,这种特殊的文件格式是使用手工递归解析器读取的,但格式已经增长并且复杂化到这种方法变得无法管理的程度.

似乎最终的解决方案是为这种格式构建一个正确的语法,然后使用像yacc这样的真正的解析器生成器来读取它,但我无法确定使用哪个这样的生成器,或者即使它们值得麻烦一点都不 我看过ANTLR和Spirit,但我们的项目除了早期的答案之外还有特定的限制因素让我想知道它们是否适合我们.特别是,我需要:

  • 使用MSVC生成C或C++代码的解析器.ANTLR 3不支持C++; 它声称直接产生C但是关于让它实际工作的文档有点令人困惑.
  • 严重限制内存使用量.内存在我们的应用程序中占据了巨大的优势,即使是微小的泄漏也是致命的.我需要能够覆盖解析器的内存分配器以使用我们的自定义malloc(),或者至少我需要给它一个连续的池,从中抽取它的所有内存(以及之后我可以解除分配).我可以为解析器可执行文件本身节省大约200kb,但是在解析时分配的任何动态堆都必须在之后释放.
  • 很好的表现.这不太重要,但我们应该能够在3ghz处理器上解析不超过一秒的100kb文本.
  • 必须是GPL免费的.我们不能使用GNU代码.

我喜欢ANTLRworks的IDE和调试工具,但看起来让它的C目标实际上与我们的应用程序一起工作将是一项艰巨的任务.在开始这个问题之前,ANTLR是否适合这项工作?

有问题的文字格式如下:

attribute "FluxCapacitance"  real constant

asset DeLorean
{
    //comment foo bar baz
    model "delorean.mdl"
    animation "gullwing.anm"
    references "Marty"
    loadonce
}

template TimeMachine
{
    attribute FluxCapacitance 10      
    asset DeLorean
}
Run Code Online (Sandbox Code Playgroud)

c c++ parsing antlr

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

Visual Studio 2008/10的直接窗口中的"搜索内存"是否已损坏?

在Visual Studio 2005中,我开始严重依赖MSVC的立即窗口来实现其有用的内存搜索字节模式功能.我们最近已升级到VS2010,现在该.S 命令似乎不再起作用了.对于我尝试的任何搜索,即使我直接从MSDN复制并粘贴示例,当我尝试使用内存搜索时,我总是会收到以下错误:

CXX0014:错误:缺少操作数

其他人已经在SO上报告了这个问题,但谷歌没有提出任何有用的讨论.这个功能在MSVC2010中是否被破坏了?我觉得微软并不太重视MSVC系列中的原生代码,所以我不会感到惊讶.

Windbg仍支持此功能(我希望),但如果可能的话,我宁愿保持在MSVC更舒适的调试环境中.

c++ visual-studio-2010 visual-studio-2008 visual-studio

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

关于强制和可选条件元组的规则匹配算法的CS术语

我正在尝试研究文献中的算法来解决一个特定的问题,但我不认为我完全知道正确的搜索术语来描述我正在寻找的东西.

目标是建立一个可查询的规则数据库,其中每个规则都被指定为元组条件 - 一些是强制的,一些是可选的.对系统的查询由关于世界的事实元组组成,并返回其强制条件与查询中的事实匹配的所有规则的列表.每个规则由匹配的可选条件的数量×权重评分,并且列表由此排序.

举个例子,如果我用它来写一个室友匹配服务,那么规则就是这样的

alice : { mandatory : { nightowl = no, smoker = no, pets < 2 }, 
          optional : { pets = 0 } }
bob :   { mandatory : { nightowl = yes, pets = 0 }, 
          optional : {smoker = no} }
charlie : { mandatory : { musician = no }, 
            optional : {nightowl = yes, pets < 2 } }
Run Code Online (Sandbox Code Playgroud)

并且查询将是

( nightowl = no, pets = 1, smoker = no, musician …
Run Code Online (Sandbox Code Playgroud)

language-agnostic algorithm computer-science

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

GDB命令打印分段错误的完整异常信息?

我正在 GDB 下调试优化的 Linux 可执行文件。我们的程序因分段错误而崩溃。然而,错误指令似乎并未实际访问无效指针;它基本上是一个mov 0xf00(%ebx), eax操作,其中 0xf00(%ebx) 是有效内存。至少,当我们找到x它的地址时,它就会出现。

用于查看当前捕获的异常的所有详细信息(包括错误操作码尝试访问的确切内存地址)的GDB 命令是什么?此信息应该位于异常陷阱框架中,但我不知道如何通过 GDB 获取该信息。

这是针对 Ubuntu 下的 x86 的。

x86 gdb

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

为什么iPhone应用程序如此之慢?

关于我尝试的每个iPhone应用程序,我都注意到的一点是,它们都有一些看起来很慢而且反应迟钝的地方.这对游戏,免费应用程序,昂贵的,流行的,"专业"应用程序,甚至Apple的内置应用程序都是如此.他们似乎都有一些地方,他们花了很多秒甚至一分钟来响应屏幕触摸; 陷入困境,一次显示一个旋转的沙滩球; "排队"输入,以便按下按钮只会忽略实际上十秒钟后做的事情,就像制作不好的DVR一样; 并且锁定了很长时间以至于操作系统看门狗只能杀死它们.

因为这些性能问题非常普遍,在我看来,必然存在一些常见的性能缺陷,一些系统问题正在为许多不同的人反复出现.我自己不是iPhone开发人员,所以我在讨论社区的意见:

iPhone上最常见的性能错误是什么?

或者,iPhone开发的人为因素是否太容易出货而性能不佳?

iphone performance

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

为什么{} + []与({} + [])不同?

我最近惊慌地发现以下内容:

> {}+[]
0

> ({}+[])
"[object Object]"

> {}+[]+1
1

> ({}+[])+1
'[object Object]1'

> {}+[] == ({}+[])
false
Run Code Online (Sandbox Code Playgroud)

为什么在括号中包装内容会改变其类型?

javascript language-lawyer

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

C++类可以导出几个不同的stl样式的迭代器吗?

我有一个封装异域数据结构的类.为了这个问题,让我们说这是一个s ContainerThingy.

我们有很多地方Thingy在这个容器中迭代s,但有几种不同的方法可以这样做 - 它们可以按顺序A或B迭代,也有子集X和Y,所以有(比如)四个排列Thingys如何被迭代(子集X按顺序A,子集X按Y顺序等).

我想创建一个自定义迭代器,Container以便我可以Thingy使用C++的基于范围的语法循环.是否可以从类中导出多个不同的迭代器?显然我不能拥有

class Container { 
  ...
  iter begin();
  iter end();
}
Run Code Online (Sandbox Code Playgroud)

因为会有四种不同的iter.那么如何告诉我的基于范围的iter使用哪种?


我应该补充说,这是一个完全性能关键的上下文,所以我们不能容忍回调函数的成本.否则我会使用map(λ)类型的交易,但在这种情况下,我们正在冒汗纳秒,如果迭代器引发额外的间接函数调用(因此分支错误预测),我将不得不坚持使用我们当前的丑陋方式迭代容器.

c++ iterator stl

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