小编pan*_*ajt的帖子

什么是专用字节,虚拟字节,工作集?

我试图使用perfmon Windows实用程序来调试进程中的内存泄漏.

这就是perfmon解释这些术语的方式:

Working Set是此过程的工作集的当前大小(以字节为单位).工作集是过程中线程最近触及的一组内存页面.如果计算机中的可用内存超过阈值,则即使不使用页面,页面也会保留在进程的工作集中.当可用内存低于阈值时,将从工作集中剪裁页面.如果需要它们,它们将在离开主存储器之前被软故障返回工作集.

Virtual Bytes是进程正在使用的虚拟地址空间的当前大小(以字节为单位).使用虚拟地址空间不一定意味着相应地使用磁盘或主存储器页面.虚拟空间是有限的,并且该过程可以限制其加载库的能力.

Private Bytes是此进程分配的内存的当前大小(以字节为单位),无法与其他进程共享.

这些是我的问题:

是否应该测量私有字节,以确定进程是否有任何泄漏,因为它不涉及任何共享库,如果发生任何泄漏,将来自进程本身?

该进程消耗的总内存是多少?它是虚拟字节还是虚拟字节和工作集的总和?

私有字节,工作集和虚拟字节之间是否有任何关系?

还有其他工具可以更好地了解内存使用情况吗?

debugging operating-system memory-leaks memory-management

463
推荐指数
4
解决办法
27万
查看次数

何时在C++中使用extern"C"?

可能重复:
为什么我们需要在C++中使用extern"C"{#include <foo.h>}?

我经常看到程序编码如下:

extern "C" bool doSomeWork() {
  //
  return true;
}
Run Code Online (Sandbox Code Playgroud)

为什么我们使用extern "C"块?我们可以用C++中的东西替换它吗?使用有什么好处extern "C"吗?

我确实看到了一个解释这个的链接但是为什么我们需要在已经有C++的情况下用C语言编译?

c c++ extern-c

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

如何快速了解任何产品的设计和代码流程?

我已经切换到一家新公司,我正在开发一个拥有巨大代码库但没有文档的产品.我想快速熟悉产品的设计和代码流程,以便尽快成为高效的会员

慢慢地,稳定地了解代码,但应该是最好和最聪明的方法应该接近代码库,以便他能够快速理解代码并开始交付?

注意:我尝试使用Star UML,并尝试对类图进行逆向工程,以便我可能对产品内部设计有一个大概的想法,但却失败了.

编辑:问题不在于了解产品的作用,而是如何设计内部结构.

使用断点修复错误和调试确实提供了实现此目的的一种方法,但我在寻找是否有更快的方法来实现这一点

在凯斯的话中:

这可能适用于某些代码库,但总的来说,我认为这是一个坏主意.你往往过于专注于细节,而一开始你想要了解大局:类是什么,通信模式是什么,等等.另外,如果你有一个分布式应用程序(客户端 - 服务器,n层)等等,或者需要很长时间才能运行它的代码可能不适合通过调试器运行它

c++ uml

20
推荐指数
3
解决办法
6210
查看次数

在Java中清理Object的最佳方法是什么?

我们在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)

这是正确的方法吗?

java

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

什么是Visual Studio中使用的.rc2文件

我是Windows开发环境的新手.我看到很多.rc2文件用于对某些MACRO类型常量执行映射到字符串.

Q1.为什么使用这些.rc2文件?

有人可以给我一个开始这些.

c++ windows visual-studio

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

C++参考和Java参考

// 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)

c++ java

11
推荐指数
2
解决办法
6076
查看次数

如何使用_CrtDumpMemoryLeaks()

我试图使用_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)

任何人都可以建议使用此功能的正确方法.

c++ memory-leaks visual-c++

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

编码标准/编码C++中的最佳实践

考虑下面的两个代码段.哪一个更好,为什么?如果您有任何其他想法,请提及.我在哪里可以找到像这样的编码实践的答案?如果您知道任何书籍/文章,请分享.

//代码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.

更新:

  1. 我故意使用do {} while(0); 因为我不想使用goto循环.

  2. 我想摆脱这么多if和break语句,所以我提出了Code 2.

我从回复中看到的是Code1和Code2的一组混合响应.与Code 1(我认为更好)相比,有些人更喜欢goto.

c++ coding-style

9
推荐指数
6
解决办法
1万
查看次数

内存中的虚拟表格布局?

虚拟表如何存储在内存中?他们的布局?

例如

class A{
    public:
         virtual void doSomeWork();
};

class B : public A{
    public:
         virtual void doSomeWork();
};
Run Code Online (Sandbox Code Playgroud)

内存中A类和B类虚拟表的布局如何?

c++ vtable

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

堆栈框架问题:Java与C++

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 c++ heap stack

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