在C或C++应用程序中发生内存泄漏是否可以接受?
如果您分配一些内存并使用它直到应用程序中最后一行代码(例如,全局对象的析构函数),该怎么办?只要内存消耗不会随着时间的推移而增长,当您的应用程序终止时(在Windows,Mac和Linux上),是否可以信任操作系统为您释放内存?如果内存被连续使用直到它被操作系统释放,你甚至会认为这是一个真正的内存泄漏.
如果第三方图书馆强迫你这样做怎么办?拒绝使用第三方图书馆,无论它有多么伟大?
我只看到一个实际的缺点,那就是这些良性泄漏会将内存泄漏检测工具显示为误报.
我总是假设在做(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)
好像我完全错过了一些东西.有任何想法吗?
浏览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编程年,我(())
都知道这些:我还完全不知道.有人可以解释一下他们的意思吗?谷歌似乎没有找到它.
我目前正在使用
onTouchEvent(MotionEvent event){
}
Run Code Online (Sandbox Code Playgroud)
检测用户何时按下我的glSurfaceView是否有办法检测何时进行长按.我猜我是否在开发文档中找不到多少,那么它将是某种方法的工作.类似于注册ACTION_DOWN并查看ACTION_UP之前的时间.
你如何使用opengl-es检测android上的长按?
对于由IEEE 32位浮点数组成的散列2d和3d向量,有什么好的散列函数(快速,良好的分布,很少的碰撞).我假设一般的3d向量,但假设法线(始终在[-1,1])的算法也是受欢迎的.我也不担心比特操纵,因为IEEE浮动也是IEEE浮动.
另一个更普遍的问题是散列Nd浮点向量,其中N非常小(3-12)并且是常量但在编译时不知道.目前我只是将这些花车作为uint并将它们混合在一起,这可能不是最好的解决方案.
我一直在考虑使用共享指针,我知道如何自己实现它 - 不想这样做,所以我在尝试std::tr1::shared_ptr
,我有几个问题......
引用计数是如何实现的?它是否使用双向链表?(顺便说一句,我已经用Google搜索了,但我找不到任何可靠的东西.)
使用它有任何陷阱std::tr1::shared_ptr
吗?
我正在尝试创建一个下拉列表,显示附加了隐藏数值的文本.然后我将在同一行上有一个标准公式,根据所选的隐藏值计算一个值.
我刚刚回答了这个问题,它问为什么迭代直到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++的答案,如果有的话.
future
和之间有什么区别shared_future
?
在什么情况下我们必须使用shared_future
而不是future
?
我试图找到与C++ 11的这两个功能形成鲜明对比的好文档,而我在网上找不到答案(至少容易/可读).
这是我目前对差异的理解
future
对象只能被查询一次get()
.shared_future
可以被查询任何次数.用例:如果多个线程依赖于异步任务的结果,那么我们必须使用shared_future
.如果需要在同一个线程中多次查询将来的对象,那么我们必须shared_future
改为使用.
欢迎提供更多信息,陷阱或一般指导方针......
c++ ×7
c ×3
c++11 ×2
3d ×1
android ×1
excel ×1
geometry ×1
hash ×1
java ×1
literals ×1
long-click ×1
memory-leaks ×1
mutex ×1
optimization ×1
overflow ×1
shared-ptr ×1
std ×1
touchscreen ×1
tr1 ×1
vector ×1