相关疑难解决方法(0)

279
推荐指数
8
解决办法
19万
查看次数

人们可以使用分析器,但为什么不停止程序呢?

如果某个东西正在使单线程程序占用,比如10倍,那么就可以在其上运行一个分析器.您也可以通过"暂停"按钮暂停它,您将看到它正在做什么.

即使它比它应该慢了10%,如果你停止它多次,不久你会看到它反复做不必要的事情.通常问题是在堆栈中间某处不是真正需要的函数调用.这不能衡量问题,但确实找到了.

编辑:反对意见主要假设您只采取1个样本.如果你是认真的,请采取10.任何一行代码,导致一定比例的浪费,如40%,将平均出现在该部分样本的堆栈上.瓶颈(单线程代码)无法隐藏它.

编辑:为了表明我的意思,许多反对意见的形式是"没有足够的样本,所以你看到的可能完全是虚假的" - 关于机会的模糊观点.但是,如果任何可识别的描述,不仅仅是在常规或常规活动中,在30%的时间内有效,那么在任何给定样本上看到它的概率是30%.

然后假设只采集了10个样本.在10个样本中看到问题的次数遵循二项分布,并且看到它0次的概率是.028.看到它1次的概率是.121.2次,概率为.233,而3次则为.267,之后下降.由于看到它少于两次的概率是.028 + .121 = .139,这意味着看到它两次或更多次的概率是1 - .139 = .861.一般规则是,如果您看到可以修复两个或更多样本的内容,则值得修复.

在这种情况下,在10个样本中看到它的机会是86%.如果你是14%没有看到它的人,那就去做更多的样品.(如果样本数量增加到20,那么两次或多次观察的几率会增加到99%以上.)所以它没有经过精确测量,但已经准确找到了,重要的是要了解它它可能很容易成为分析器无法实际找到的东西,例如涉及数据状态的东西,而不是程序计数器.

optimization performance profiling

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

当你尝试释放()已经释放c中的内存时会发生什么?

例如:

char * myString = malloc(sizeof(char)*STRING_BUFFER_SIZE);
free(myString);
free(myString);
Run Code Online (Sandbox Code Playgroud)

这样做会有不良副作用吗?

c memory memory-management

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

删除或免费

C++语言有关于如何释放指针所指向的内存的特定规则.这些规则要求您知道如何分配内存以正确释放它.

例如,

int *p = new int();
std::free(p);
Run Code Online (Sandbox Code Playgroud)

导致未定义的行为.(参考)

在现代C++中,我们喜欢尽可能使用智能指针,但有时我们可能希望使用分配原始指针的库或函数.假设我想使用以下形式的函数:

char* NotMyFunction();
Run Code Online (Sandbox Code Playgroud)

如何正确管理此功能分配的内存?

c++

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