小编Dan*_*per的帖子

334
推荐指数
8
解决办法
65万
查看次数

186
推荐指数
5
解决办法
26万
查看次数

如何为C++代码生成调用图

我正在尝试生成调用图,用它来找出所有可能执行特定函数的执行路径(这样我就不必手动计算出所有路径,因为有很多路径可以导致这个功能).例如:

path 1: A -> B -> C -> D  
path 2: A -> B -> X -> Y -> D  
path 3: A -> G -> M -> N -> O -> P -> S -> D  
...  
path n: ...
Run Code Online (Sandbox Code Playgroud)

我已经尝试过Codeviz和Doxygen,不知怎的,两个结果只显示目标函数的被调用者D.在我的例子中,D是一个类的成员函数,其对象将被包装在智能指针中.客户端将始终通过工厂获取智能指针对象以调用D.

有谁知道如何实现这一目标?

c++ static-analysis call-graph

79
推荐指数
4
解决办法
5万
查看次数

C++ 11 std :: bind和boost :: bind之间的区别

这两者有什么区别吗?还是我的安全,以取代所有出现boost::bindstd::bind在我的代码,从而消除对加速的依赖?

c++ boost boost-bind stdbind c++11

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

什么是std :: unique_ptr :: get

是不是首先std::unique_ptr::get打败了unique_ptr的目的?我本来期望这个函数改变它的状态,所以它不再有指针.是否有实际有用的std :: unique_ptr :: get?

c++ pointers unique-ptr c++11

55
推荐指数
4
解决办法
3万
查看次数

列数太多了多少列?

我注意到这里有很多人在一个表中列出了20多个(我已经看到多达55个)列的表.现在我不假装成为数据库设计专家,但我总是听说这是一个可怕的做法.当我看到这一点时,我通常建议分成两个具有一对一关系的表:一个包含最常用的数据,另一个包含最少使用的数据.虽然同时存在性能问题(更少的JOIN等).所以我的问题是:

当谈到真正的大规模数据库时,拥有大量列实际上是否有优势,尽管这通常导致许多NULL值?

这更像是一个性能损失:很多列有很多NULL,或者有很多JOIN的列?

database database-design database-performance

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

重新分配后,我们是否会在缓冲区中丢失数据?

我很难理解realloc是如何工作的.如果我malloc'ed缓冲区并将数据复制到该缓冲区,让我们说"AB":

 +------------+
 | A | B | \0 |
 +------------+
Run Code Online (Sandbox Code Playgroud)

然后我重新分配了缓冲区,数据中是否会丢失(甚至是单个字节)?或者只是扩展缓冲区?:

 +------------------------+
 | A | B | \0 | ? | ? | ? |
 +------------------------+
Run Code Online (Sandbox Code Playgroud)

码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(void){

    char* buffer    = (char*) malloc( sizeof(char) * 3 );
    strncpy(buffer, "AB", 2);

    buffer          = (char*) realloc(buffer, sizeof(char) * 6); /* Will there be any lost here? */
    free(buffer);
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

c memory-management realloc

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

Linux的线程本地存储实现

__thread Foo foo;
Run Code Online (Sandbox Code Playgroud)

"foo"如何实际解决?编译器是否以函数调用静默替换"foo"的每个实例?"foo"存储在相对于堆栈底部的某处,并且编译器将其存储为"嘿,对于每个线程,将此空间放在堆栈底部附近,并将foo存储为'堆栈底部的偏移x' "?

linux multithreading gcc thread-local-storage

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

我如何使用大小的运算符删除/删除[],为什么它们更好?

C++ 14引入了"大小"版本operator delete,即

void operator delete( void* ptr, std::size_t sz );
Run Code Online (Sandbox Code Playgroud)

void operator delete[]( void* ptr, std::size_t sz );
Run Code Online (Sandbox Code Playgroud)

通过N3536阅读,似乎引入了这些运营商以提高性能.我知道典型的分配器operator new"存储"大容量内存的大小,这就是典型的operator delete"知道"多少内存返回到免费商店.

我不确定为什么"大小"版本operator delete会在性能方面有所帮助.唯一可以加快速度的是从控制块开始减少关于大小的读取操作.这确实是唯一的优势吗?

其次,我该如何处理阵列版本?AFAIK,分配的数组的大小不是简单的sizeof(type)*number_elements,但可能会分配一些额外的字节,因为实现可能会使用这些字节作为控制字节.operator delete[]在这种情况下我应该传递什么"大小" ?你能提供一个简短的使用例子吗?

c++ delete-operator c++14

19
推荐指数
2
解决办法
2281
查看次数

为什么C++不支持命名参数

以前,我使用过python.在Python中,我使用命名参数(关键字参数)进行函数调用.关于命名参数的维基百科页面告诉我C++不支持它.为什么C++不支持命名参数?它是否支持未来版本的C++标准?

c++ named-parameters

18
推荐指数
1
解决办法
8317
查看次数