c - 为灵活性和处理分配内存的更好方法

标签 c memory-management coding-style

不同的程序员有不同的编码风格。 我和同事从事图像数据处理工作,我们有 3 种不同的方法。

同事 1:

int IMAGE_WIDTH=1280;
int IMAGE_HEIGHT=800;

char* colleague1_way() //just allocate when he wants
{
char* mem = malloc(IMAGE_WIDTH*IMAGE_HEIGHT*2);
return mem;
}

int main(void)
{ 
    char* data;

    data=colleague1_way();
    function1(data); //pass by pointer
    function2(data); //pass by pointer
    function3(data); //pass by pointer

    free(data);
}

同事2:

int IMAGE_WIDTH=1280;
int IMAGE_HEIGHT=800;
char* data;    //set it as global memory

void colleague2_way()
{
data = malloc(IMAGE_WIDTH*IMAGE_HEIGHT*2);
}

int main(void)
{
    colleague2_way();

    function1(); //void input, proceed data inside function
    function2(); //void input, proceed data inside function
    function3(); //void input, proceed data inside function

    free(data);        
}

我:

int IMAGE_WIDTH=1280;
int IMAGE_HEIGHT=800;

int main(void)
{
    char* data = malloc(IMAGE_WIDTH*IMAGE_HEIGHT*2);

    function1(data); //pass by reference 
    function2(data); //pass by reference
    function3(data); //pass by reference

    free(data);        
}

我的想法是

  1. 我可以清楚地看到分配的内存,并在 main() 结束时释放它。
  2. function1~3可能在另一个cpp文件中,所以很容易处理。

任何人都可以给我评论,还有什么更好的方法吗? 另外,如果它是在 C++ 中,有什么好的方法吗?

最佳答案

我不知道你为什么想要堆内存的具体原因,但堆栈更快。您的示例代码使您的程序看起来很小,所以我会做类似的事情:

#define IMAGE_WIDTH 1280
#define IMAGE_HEIGHT 800
#define PIXEL_DEPTH 2

int main(void)
{
    char data[IMAGE_WIDTH][IMAGE_HEIGHT][PIXEL_DEPTH] = {0};

    function1(data); //pass by reference 
    function2(data); //pass by reference
    function3(data); //pass by reference

}

这就像您的解决方案,但您不必担心释放内存并且写入速度更快。就像你说的不同的程序员有不同的解决方案,那只是我的两分钱。

关于c - 为灵活性和处理分配内存的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52788883/

相关文章:

c++ - 通过引用 c++ 删除对象

java - 这是在 Java 中重复方法调用的最干净的方法吗?

Java:用 lambda 替换 switch。值得?

arrays - C中偶数数组的递归

c - 如果我在 parent 和 child 中 fork 和 exec 会发生什么?

core-data - 核心数据 : avoiding retain cycles in to-many relationships

ruby 风格 : How to check whether a nested hash element exists

c - 反向逐字打印字符串?

php - 如何从 c/c++ php 扩展中包含/需要一个 php 文件,将变量传递给用户空间范围?

c# - C# 中字符串连接的内存分配