不同的程序员有不同的编码风格。我和同事从事图像数据处理工作,我们有 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);
}
我的想法是
- 我可以清楚地看到分配的内存,并在 main() 结束时释放它。
- 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
}
这就像您的解决方案,但您不必担心释放内存并且写入速度更快。就像你说的不同的程序员有不同的解决方案,那只是我的两分钱。
我是一名优秀的程序员,十分优秀!