繁体   English   中英

什么是内存分配的最佳方法

[英]What is the best way to memory allocate

我正在尝试在这种情况下分配内存,实际上我做了我想要的,但是我想知道是否有更好的方法或者我做错了什么?

我只是想尽可能地编写功能代码,对此我还能做什么。

void createDATABASE(int uint_val,int int_val,int str_val,int dbl_val)
{
    int *decision=(int*)malloc(4*sizeof(int));
    int i;
    dbStore tdbStore;
    t_CreateDatabase tCreateDatabase;
    signal(SIGINT,err_memleak); // SIGNAL PROCESSING

    memcpy(tCreateDatabase.filename,"test.bin",32); // database name copied

    decision[0] = uint_val; decision[1] = int_val;
    decision[2] = str_val; decision[3] = dbl_val;
    for(i=0;i<4;i++){
        if(decision[i] > 0){
            switch(i){
                case 0:
                    tdbStore.unsig_int = u_intAllocate(uint_val);
                    if(tdbStore.unsig_int==NULL) raise(SIGINT);
                    break;
                case 1:
                    tdbStore.sig_int = n_intAllocate(int_val);
                    if(tdbStore.sig_int==NULL) raise(SIGINT);
                    break;
                case 2:
                    tdbStore.strings = strAllocate(str_val);
                    if(tdbStore.strings==NULL) raise(SIGINT);
                    break;
                case 3:
                    tdbStore.big_int = d_intAllocate(dbl_val);
                    if(tdbStore.big_int==NULL) raise(SIGINT);
                    break;
            }
        }
    }


}

char **strAllocate(int val)
{
    int column=1024,l;
    char **node = (char**)malloc(val*sizeof(char*));
    for(l=0;l<val;l++)
        node[l] = (char*)malloc(column*sizeof(char));
    return node;
}
double *d_intAllocate(int val)
{
    double *node = (double*)malloc(val*sizeof(double));
    return node;
}
unsigned int *u_intAllocate(int val)
{
    unsigned int *node = (unsigned int*)malloc(val*sizeof(unsigned int));
    return node;
}
int *n_intAllocate(int val)
{
    int *node = (int*)malloc(val*sizeof(int));
    return node;
}

感谢您的建议。

建议1

您可以轻松更换

int *decision=(int*)malloc(4*sizeof(int));

通过

int decision[4];

当数组的大小固定时,使用malloc毫无意义。

建议2

不要对从malloc返回的值使用显式malloc

采用

char **node = malloc(val*sizeof(char*));

代替

char **node = (char**)malloc(val*sizeof(char*));

已知对malloc的返回值使用显式转换是有问题的。 结帐我是否强制转换malloc的结果? 有关详细信息。

建议3

您可以通过仅调用malloc两次来减少字符串分配的开销。

char **strAllocate(int val)
{
    int column=1024,l;
    char **node = malloc(val*sizeof(char*));
    char* data = malloc(val*column); // No need for sizeof(char). It is always 1.
    for(l=0;l<val;l++)
        node[l] = data + i*column;
    return node;
}

如果使用此功能,则必须记住在释放内存时只有两次调用free

free(*node);
free(node);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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