繁体   English   中英

C中的内存消耗

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM