我想知道如何用C来衡量图形的内存消耗。 使用以下代码,我使用V节点初始化图形,没有边缘:
Graph GRAPHinit(int V)
{
int v;
Graph G = malloc(sizeof *G);
G->V = V; G->E = 0;
G->adj = malloc(V*sizeof(link));
for (v = 0; v < V; v++) G->adj[v] = NULL;
return G;
}
Graph是一个结构,表示为邻接列表:
struct graph {
int V;
int E;
link *adj;
};
typedef struct node *link;
struct node {
int v;
link next;
};
typedef struct graph *Graph
是否可以使用sizeof-Operator测量G使用的空间量? 其他可能性?
答案 0 :(得分:3)
不,你不能完全用sizeof-operator来做,因为这只能用于编译时的静态内存分配。
充其量你可以实现像
这样的新功能unsigned int getMemoryUsage(Graph *g){
return sizeof(*G) + G->V * sizeof(link);
}
答案 1 :(得分:1)
这取决于您要测量的内容:
a)此图表的内存malloc
b)由于分配图形而编程内存消耗
对于a),只计算每种节点的数量并乘以每种类型的sizeofs。对于b),您可以计算a),然后查看malloc()
的实现,看看它在幕后的作用。还有其他技术,例如black box策略,往往需要付出很多努力来验证。
答案 2 :(得分:0)
G是2个整数和一个指针。
指针指向的每个结构包含一个int
和另一个指针。
在32位域中,G为12个字节,每个链路为8个字节。这不计算每个malloc()
所需的额外开销,也不计算malloc()
实际上不必为每个结构分配如此小的内存块的事实。
简短的回答,您需要自己测量一下,或者如果您想要精确的尺寸,请从池中使用您自己的特殊分配器进行分配。