我之所以考虑这样做,是因为它符合我的划分思想,所以我试图弄清楚这是否是一个好主意。
// obj1.c
static char *data;
char* return_pointer_for_data() {
return data;
}
// obj2.c
static char *buffer;
void copy_data_to_buffer(char* ptr) {
buffer[5] = ptr[5];
}
// main.c
copy_data_to_buffer(return_pointer_for_data());
我想知道做return_pointer_for_data()
的好处和缺点,以及这种方法有多常见。我想到的另一种方法是:
// obj2.c
void copy_data_to_buffer(char* ptr1, char* ptr2) {
ptr1[5] = ptr2[5];
}
// main.c
char *data;
char *buffer;
copy_data_to_buffer(buffer, data);
我已经得到了关于复制数据的访问速度比较的答案,从“高度依赖”到“无关紧要”,所以我决定根据return_pointer_for_data()
的优点和缺点做出决定。
3条答案
按热度按时间vql8enpb1#
好处:
1.易于通过函数共享数据,您不必在每次调用函数时都传递
char*
。缺点:
1.如果你的程序有多个线程,它可能会导致一个竞争条件,因为多个线程可以写它在同一时间。你必须使用锁来保护它。
1.当你的代码增长时,它会使你的代码很难维护。你需要仔细地安排你的函数调用,因为它们可能需要其他函数来设置全局变量。
在这种情况下,性能并不太重要,第一种方法具有函数调用的开销。
k4ymrczo2#
不去想微观优化,想想程序设计和架构(+算法)
htzpubme3#
好了,这里是基本问题-假设明显的问题(没有为指针分配内存)是固定的:
如果你没有看到发生了什么,第一个函数会清除
ptr
所指向的任何东西(并且可能会覆盖结束和崩溃的东西),使其对进一步的调用毫无用处。什么可以阻止这种情况发生?除了上去告诉新来的家伙“这里的事情不是这样工作的”,因为这可能是在你做其他事情的几年之后,不能这样做。所以如果你想做到这一点,让你的设计万无一失,坚不可摧。