[英]Memory consumption in C
我想知道如何用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使用的空间量? 其他可能性?
不,你不能纯粹使用sizeof-operator来完成它,因为这只能用于编译时静态内存分配。
充其量你可以实现一个新的功能
unsigned int getMemoryUsage(Graph *g){
return sizeof(*G) + G->V * sizeof(link);
}
这取决于您要测量的内容:
一个)存储器malloc
由该曲线图中编
b)由于分配图形而编程存储器消耗
对于a),只计算每种节点的数量并乘以每种类型的sizeofs。 对于b),您可以计算a),然后查看malloc()
的实现,看看它在幕后的作用。 还有其他技术,例如黑盒策略,往往需要花费很多精力来验证。
G是2个整数和一个指针。 指针指向的每个结构包含一个int
和另一个指针。 在32位域中,G为12个字节,每个链路为8个字节。 这不计算每个malloc()
所需的额外开销,也不计算malloc()
实际上不必为每个结构分配如此小的内存块的事实。
简短的回答,如果你想要精确的尺寸,你需要自己测量或者从池中分配你自己的特殊分配器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.