小编Chr*_*ica的帖子

内存泄漏是否正常?

在C或C++应用程序中发生内存泄漏是否可以接受?

如果您分配一些内存并使用它直到应用程序中最后一行代码(例如,全局对象的析构函数),该怎么办?只要内存消耗不会随着时间的推移而增长,当您的应用程序终止时(在Windows,Mac和Linux上),是否可以信任操作系统为您释放内存?如果内存被连续使用直到它被操作系统释放,你甚至会认为这是一个真正的内存泄漏.

如果第三方图书馆强迫你这样做怎么办?拒绝使用第三方图书馆,无论它有多么伟大?

我只看到一个实际的缺点,那就是这些良性泄漏会将内存泄漏检测工具显示为误报.

c c++ memory-leaks

229
推荐指数
17
解决办法
3万
查看次数

为什么(a%256)与(a&0xFF)不同?

我总是假设在做(a % 256)优化器时自然会使用有效的按位操作,就像我写的那样(a & 0xFF).

在编译器资源管理器gcc-6.2(-O3)上进行测试时:

// Type your code here, or load an example.
int mod(int num) {
    return num % 256;
}

mod(int):
    mov     edx, edi
    sar     edx, 31
    shr     edx, 24
    lea     eax, [rdi+rdx]
    movzx   eax, al
    sub     eax, edx
    ret
Run Code Online (Sandbox Code Playgroud)

在尝试其他代码时:

// Type your code here, or load an example.
int mod(int num) {
    return num & 0xFF;
}

mod(int):
    movzx   eax, dil
    ret
Run Code Online (Sandbox Code Playgroud)

好像我完全错过了一些东西.有任何想法吗?

c++ optimization

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

这是什么 (( ))?

浏览gcc编译器源代码(gcc/c-family/c-pragma.c)时,我看到:

typedef struct GTY(()) align_stack {
  int                  alignment;
  tree                 id;
  struct align_stack * prev;
} align_stack;
Run Code Online (Sandbox Code Playgroud)

而且无论我有多少C编程年,我(())都知道这些:我还完全不知道.有人可以解释一下他们的意思吗?谷歌似乎没有找到它.

c c++

90
推荐指数
2
解决办法
4246
查看次数

使用Android检测长按

我目前正在使用

onTouchEvent(MotionEvent event){
}
Run Code Online (Sandbox Code Playgroud)

检测用户何时按下我的glSurfaceView是否有办法检测何时进行长按.我猜我是否在开发文档中找不到多少,那么它将是某种方法的工作.类似于注册ACTION_DOWN并查看ACTION_UP之前的时间.

你如何使用opengl-es检测android上的长按?

java android touchscreen long-click

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

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

散列2D,3D和nD向量

对于由IEEE 32位浮点数组成的散列2d和3d向量,有什么好的散列函数(快速,良好的分布,很少的碰撞).我假设一般的3d向量,但假设法线(始终在[-1,1])的算法也是受欢迎的.我也不担心比特操纵,因为IEEE浮动也是IEEE浮动.

另一个更普遍的问题是散列Nd浮点向量,其中N非常小(3-12)并且是常量但在编译时不知道.目前我只是将这些花车作为uint并将它们混合在一起,这可能不是最好的解决方案.

3d hash geometry vector

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

如何实现std :: tr1 :: shared_ptr?

我一直在考虑使用共享指针,我知道如何自己实现它 - 不想这样做,所以我在尝试std::tr1::shared_ptr,我有几个问题......

引用计数是如何实现的?它是否使用双向链表?(顺便说一句,我已经用Google搜索了,但我找不到任何可靠的东西.)

使用它有任何陷阱std::tr1::shared_ptr吗?

c++ tr1 shared-ptr

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

如何创建显示带有数字隐藏值的文本的Excel下拉列表

我正在尝试创建一个下拉列表,显示附加了隐藏数值的文本.然后我将在同一行上有一个标准公式,根据所选的隐藏值计算一个值.

excel

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

整数文字的类型默认不是int?

我刚刚回答了这个问题,它问为什么迭代直到for循环中的100亿需要更长时间(OP实际上在10分钟后中止)比迭代直到10亿:

for (i = 0; i < 10000000000; i++)
Run Code Online (Sandbox Code Playgroud)

现在我和其他许多人明显的答案是,这是因为迭代变量是32位(从未达到100亿)并且循环得到无限循环.

但是虽然我意识到了这个问题,但我仍然想知道编译器内部究竟发生了什么?

由于文字没有附加一个L,它应该是IMHO类型int,因此32位.因此,由于溢出,它应该是int范围内的正常可达.为了真正认识到无法从中获取int,编译器需要知道它是100亿,因此将其视为超过32位的常量.

这样的文字是否会自动升级到拟合(或至少是实现定义的)范围(在这种情况下至少是64位),即使没有附加L并且是这个标准行为?或者是在幕后发生了什么不同,比如UB由于溢出(整数溢出实际上是UB)?标准中的一些引用可能很好,如果有的话.

虽然最初的问题是C,但我也很欣赏C++的答案,如果有的话.

c c++ overflow literals

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

future和shared_future有什么区别?

future和之间有什么区别shared_future
在什么情况下我们必须使用shared_future而不是future

我试图找到与C++ 11的这两个功能形成鲜明对比的好文档,而我在网上找不到答案(至少容易/可读).

这是我目前对差异的理解

  1. future对象只能被查询一次get().
  2. shared_future 可以被查询任何次数.

用例:如果多个线程依赖于异步任务的结果,那么我们必须使用shared_future.如果需要在同一个线程中多次查询将来的对象,那么我们必须shared_future改为使用.

欢迎提供更多信息,陷阱或一般指导方针......

c++ multithreading mutex c++11

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