小编ano*_*non的帖子

Linux C++:如何分析由于缓存未命中而浪费的时间?

我知道我可以使用gprof来对我的代码进行基准测试.

但是,我有这个问题 - 我有一个智能指针,具有额外的间接级别(将其视为代理对象).

因此,我有这个额外的层,几乎影响所有功能,并带有缓存的螺丝.

有没有办法测量我的CPU因缓存未命中而浪费的时间?

谢谢!

c++ linux profiling caching

44
推荐指数
6
解决办法
3万
查看次数

是否有可读的STL实现?

我在Linux上; 看着STL标题; 他们真的很复杂.

在某个地方,是否有一个较小版本的STL具有STL的核心功能,但实际上是否可读?

谢谢!

c++ stl

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

C/C++宏/模板blackmagic生成唯一名称

宏很好.模板很好.几乎无论它的工作原理都很好.

这个例子是OpenGL; 但该技术是C++特有的,并且不依赖于OpenGL的知识.

精确问题:

我想要一个表达式E; 我不需要指定唯一名称; 这样,在定义E的地方调用构造函数,并在块E的末尾调用析构函数.

例如,考虑:

class GlTranslate {
  GLTranslate(float x, float y, float z); {
    glPushMatrix();
    glTranslatef(x, y, z);
  }
  ~GlTranslate() { glPopMatrix(); }
};
Run Code Online (Sandbox Code Playgroud)

手动解决方案

{
  GlTranslate foo(1.0, 0.0, 0.0); // I had to give it a name
  .....
} // auto popmatrix
Run Code Online (Sandbox Code Playgroud)

现在,我不仅有glTranslate,还有很多其他的PushAttrib/PopAttrib调用.我宁愿不必为每个var提出一个唯一的名称.是否存在涉及宏模板的一些技巧......或者其他会自动创建变量的变量,在定义点调用构造函数; 和块结束时调用的析构函数?

谢谢!

c++ raii c-preprocessor

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

在OpenGL顶点着色器中,w是什么,为什么要除以它?

void main(void)
{
  vec4 clipCoord = glModelViewProjectionmatrix * gl_Vertex;
  gl_Position = clipCoord;

  gl_FrontColor = gl_Color;

  vec3 ndc = clipCoord.xyz / clipCoord.w;
Run Code Online (Sandbox Code Playgroud)

所以这clipCoord只是做标准的固定管道转换.为什么我会分开w,我从中得到什么?

opengl vertex-shader

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

为什么在llvm上没有一个好的方案/ lisp?

有Gambit计划,麻省理工学院计划,PLT计划,鸡计划,Bigloo,Larceny,......; 然后有所有的lisps.

然而,就我所知,LLVM上没有(据我所知)一个流行的方案/ lisp,即使LLVM提供了很多很好的东西,比如:

  • 比x86更容易生成代码
  • 容易做出C FFI调用......

那么为什么LLVM上没有一个好的方案/ lisp呢?

lisp scheme llvm

39
推荐指数
6
解决办法
2万
查看次数

Vim搜索所有现有的缓冲区

处理单个文件时,我习惯于:

/blah
do some work
n
do some work
n
do some work
Run Code Online (Sandbox Code Playgroud)

假设现在我想在Vim中加载的所有缓冲区中搜索一些模式,对它们做一些工作,然后继续.我将为此工作流程使用哪些命令?

vim

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

C++类可以确定它是在堆栈还是堆上?

我有

class Foo {
....
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让Foo能够分开:

function blah() {
  Foo foo; // on the stack
}
Run Code Online (Sandbox Code Playgroud)

function blah() {
  Foo foo* = new Foo(); // on the heap
}
Run Code Online (Sandbox Code Playgroud)

我希望Foo能够做出不同的事情,这取决于它是在Stack上堆还是堆.

编辑:

Alof的人问我"为什么这样做?"

答案:

我现在正在使用重新计算的GC.但是,我希望能够运行标记和扫描.为此,我需要标记一组"根"指针 - 这些是堆栈上的指针.因此,对于每个类,我想知道它们是在堆栈中还是在堆中.

c++ heap stack

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

GLSL中的printf?

在C中,我可以调试代码:

fprintf(stderr, "blah: %f", some_var);
Run Code Online (Sandbox Code Playgroud)

在GLSL中......无论如何我只是在Vertex或Fragment着色器中转储一个值?我不在乎它是否缓慢; 我只想转出价值.理想情况下,我想要一个如下设置:

  • normal state =正常运行GLSL着色器
  • 按键'd'=在ULTRA慢速模式下生成下一帧,其中Vertex/Fragment着色器中的"printfs"被执行并转出.

这可行吗?(我不关心性能;我只是想为一帧做这个).

谢谢!

glsl

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

是否有一个与getcwd等效的C++?

我看到C的getcwd来自:man 3 cwd

我怀疑C++有一个类似的,可以返回一个std :: string.

如果是这样,它叫什么,我在哪里可以找到它的文档?

谢谢!

c++ getcwd

33
推荐指数
4
解决办法
6万
查看次数

zsh别名 - >功能?

假设我有:

alias gg="git grep"
Run Code Online (Sandbox Code Playgroud)

然后像:

gg "int x"
Run Code Online (Sandbox Code Playgroud)

有效,但是

gg int x
Run Code Online (Sandbox Code Playgroud)

得到投诉.有没有办法将gg重写为zsh中的函数,以便它获取gg之后的所有参数,并将它们填充到字符串中?

谢谢!

arguments zsh

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

标签 统计

c++ ×5

arguments ×1

c-preprocessor ×1

caching ×1

getcwd ×1

glsl ×1

heap ×1

linux ×1

lisp ×1

llvm ×1

opengl ×1

profiling ×1

raii ×1

scheme ×1

stack ×1

stl ×1

vertex-shader ×1

vim ×1

zsh ×1