在Visual Studio中,我们都有"baadf00d",在运行时在C++中检查调试器中的变量时看到过"CC"和"CD".
根据我的理解,"CC"仅处于DEBUG模式,以指示内存何时是new()或alloc()并且是单元化的."CD"代表删除或免费内存.我在RELEASE版本中只看过"baadf00d"(但我可能错了).
偶尔会遇到内存泄漏,缓冲区溢出等问题,这些信息会派上用场.
是否有人能够指出何时以何种模式将内存设置为可识别的字节模式以进行调试?
我想我从这里理解答案,但为了以防万一,我想明确询问以下内容(如果您认为这是同一个问题,我表示道歉,但对我而言,对于这些问题感到不同):
func f() *int {
d := 6
pD := new(int)
pD = &d // option 1
*pD = d // option 2
return pD
}
Run Code Online (Sandbox Code Playgroud)
我只是将引用复制为指针的第一个选项是性能方面,更优化(这是教育猜测,但似乎很明显).我更喜欢这种方法/模式.
第二种选择是(浅)复制(?).我认为这种方法,因为它复制,我不担心GC扫描'd'的实例.由于我的不安全感(或作为初学者的无知),我经常使用这种方法.
我所担心的(或更多,不安全)是在第一种方法(其中'd'的地址被转移)中,GC会认识到它('d'变量)被指针容器引用,因此它不会被扫除?因此,使用这种方法是安全的吗?即我可以安全地传递从func'f()'返回的指针'pD'在应用程序的生命周期?