我试图使用perfmon Windows实用程序来调试进程中的内存泄漏.
这就是perfmon解释这些术语的方式:
Working Set是此过程的工作集的当前大小(以字节为单位).工作集是过程中线程最近触及的一组内存页面.如果计算机中的可用内存超过阈值,则即使不使用页面,页面也会保留在进程的工作集中.当可用内存低于阈值时,将从工作集中剪裁页面.如果需要它们,它们将在离开主存储器之前被软故障返回工作集.
Virtual Bytes是进程正在使用的虚拟地址空间的当前大小(以字节为单位).使用虚拟地址空间不一定意味着相应地使用磁盘或主存储器页面.虚拟空间是有限的,并且该过程可以限制其加载库的能力.
Private Bytes是此进程分配的内存的当前大小(以字节为单位),无法与其他进程共享.
这些是我的问题:
是否应该测量私有字节,以确定进程是否有任何泄漏,因为它不涉及任何共享库,如果发生任何泄漏,将来自进程本身?
该进程消耗的总内存是多少?它是虚拟字节还是虚拟字节和工作集的总和?
私有字节,工作集和虚拟字节之间是否有任何关系?
还有其他工具可以更好地了解内存使用情况吗?
我经常看到程序编码如下:
extern "C" bool doSomeWork() {
//
return true;
}
Run Code Online (Sandbox Code Playgroud)
为什么我们使用extern "C"
块?我们可以用C++中的东西替换它吗?使用有什么好处extern "C"
吗?
我确实看到了一个解释这个的链接但是为什么我们需要在已经有C++的情况下用C语言编译?
我已经切换到一家新公司,我正在开发一个拥有巨大代码库但没有文档的产品.我想快速熟悉产品的设计和代码流程,以便尽快成为高效的会员
慢慢地,稳定地了解代码,但应该是最好和最聪明的方法应该接近代码库,以便他能够快速理解代码并开始交付?
注意:我尝试使用Star UML,并尝试对类图进行逆向工程,以便我可能对产品内部设计有一个大概的想法,但却失败了.
编辑:问题不在于了解产品的作用,而是如何设计内部结构.
使用断点修复错误和调试确实提供了实现此目的的一种方法,但我在寻找是否有更快的方法来实现这一点
在凯斯的话中:
这可能适用于某些代码库,但总的来说,我认为这是一个坏主意.你往往过于专注于细节,而一开始你想要了解大局:类是什么,通信模式是什么,等等.另外,如果你有一个分布式应用程序(客户端 - 服务器,n层)等等,或者需要很长时间才能运行它的代码可能不适合通过调试器运行它
我们在Java中没有像Java一样的Java中的析构函数.
Q1.我们应该如何清理java中的任何Object.
Q2.是否有替代finally块.
Q3.有时我们必须从我们的类中明确地调用初始化/终止第三方代码,例如
public classs MyClass{
public MyClass(){
ThirdPartyInitialize();
}
protected void finalize(){
ThirdPartyTerminate();
}
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
我是Windows开发环境的新手.我看到很多.rc2文件用于对某些MACRO类型常量执行映射到字符串.
Q1.为什么使用这些.rc2文件?
有人可以给我一个开始这些.
// C++示例
#include <iostream>
using namespace std;
int doHello (std::string&);
int main() {
std::string str1 = "perry";
cout << "String=" << str1 << endl;
doHello(str1);
cout << "String=" << str1 << endl; // prints pieterson
return 0;
}
int doHello(std::string& str){
str = "pieterson";
cout << "String=" << str << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,正如预期的那样,当修改str引用时,字符串'str1'引用被修改
// Java示例
public class hello {
public static void main(String args[]){
String str1 = "perry";
System.out.println("String=" + str1);
doHello(str1);
System.out.println("String=" + str1); // does not …
Run Code Online (Sandbox Code Playgroud) 我试图使用_CrtDumpMemoryLeaks()来显示程序中的内存泄漏.
但它没有显示任何内容,除了在没有内存泄漏的情况下返回0,以及在发生泄漏时返回1.
这里的链接显示输出应该是:
Detected memory leaks!
Dumping objects ->
D:\VisualC++\CodeGuru\MemoryLeak\MemoryLeak.cpp(67) : {60}
normal block at 0x00324818, 4 bytes long.
Data: <, > 2C 00 00 00
Object dump complete.
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议使用此功能的正确方法.
考虑下面的两个代码段.哪一个更好,为什么?如果您有任何其他想法,请提及.我在哪里可以找到像这样的编码实践的答案?如果您知道任何书籍/文章,请分享.
//代码1
bool MyApplication::ReportGenerator::GenerateReport(){
bool retval = false;
do{
if (!isAdmin()){
break;
}
if (!isConditionOne()){
break;
}
if (!isConditionTwo()){
break;
}
if (!isConditionThree()){
break;
}
retval = generateReport();
} while(0);
return retval;
}
Run Code Online (Sandbox Code Playgroud)
//代码2
bool MyApplication::ReportGenerator::GenerateReport(){
if (!isAdmin() || !isConditionOne() || !isConditionTwo() || !isConditionThree()){
return false;
}
return generateReport();
}
Run Code Online (Sandbox Code Playgroud)
罗伯特C.马丁的清洁代码是一本很好的书来处理这个问题.但是,我想这本书倾向于Java.
更新:
我故意使用do {} while(0); 因为我不想使用goto循环.
我想摆脱这么多if和break语句,所以我提出了Code 2.
我从回复中看到的是Code1和Code2的一组混合响应.与Code 1(我认为更好)相比,有些人更喜欢goto.
虚拟表如何存储在内存中?他们的布局?
例如
class A{
public:
virtual void doSomeWork();
};
class B : public A{
public:
virtual void doSomeWork();
};
Run Code Online (Sandbox Code Playgroud)
内存中A类和B类虚拟表的布局如何?
Q1.在Java中,所有对象,数组和类变量都存储在堆上?C++也是如此吗?数据段是Heap的一部分吗?
C++中的以下代码怎么样?
class MyClass{
private:
static int counter;
static int number;
};
MyClass::number = 100;
Run Code Online (Sandbox Code Playgroud)
Q2.据我所知,编译器给出特定值的变量存储在数据段中,未初始化的全局变量和静态变量存储在BSS中(块起始符号).在这种情况下,编译器将静态的MyClass :: counter初始化为零,因此将其存储在BSS中,初始化为100的MyClass :: number存储在数据段中.我在做出结论时是否正确?
Q3.考虑以下代码:
void doHello(MyClass &localObj){
// 3.1 localObj is a reference parameter, where will this get stored in Heap or Stack?
// do something
}
void doHelloAgain(MyClass localObj){
// 3.2 localObj is a parameter, where will this get stored in Heap or Stack?
// do something
}
int main(){
MyClass *a = new MyClass(); // stored in heap
MyClass localObj;
// …
Run Code Online (Sandbox Code Playgroud) c++ ×8
c ×2
java ×2
memory-leaks ×2
coding-style ×1
debugging ×1
extern-c ×1
heap ×1
stack ×1
uml ×1
visual-c++ ×1
vtable ×1
windows ×1