Cow*_*Zow 7 c malloc memory-management
块范围中的static关键字与使用malloc相比有什么优势?
例如:
功能A:
f() {
static int x = 7;
}
Run Code Online (Sandbox Code Playgroud)
功能B:
f() {
int *x = malloc(sizeof(int));
if (x != NULL)
*x = 7;
}
Run Code Online (Sandbox Code Playgroud)
如果我正确理解这一点,两个程序都会创建一个存储在堆上的整数7.在A中,变量在主方法执行之前在某个永久存储器的最开始创建.在B中,一旦调用函数,就在现场分配内存,然后在指针指向的位置存储7.在什么类型的情况下,您可以使用一种方法而不是另一种方法?我知道你不能在函数A中释放x,所以不会使B一般更优选吗?
两个程序都创建一个
integer 7
存储在堆上的程序
不,他们没有.
static
创建一个具有静态存储持续时间的对象,该持续存储持续时间在程 动态分配的对象(由其创建malloc
)保留在内存中,直到被显式删除free
.两者都提供不同的功能 static
维护函数调用中对象的状态,而动态分配的对象则不维护.
在什么类型的情况下,您可以使用一种方法而不是另一种方法?
您可以使用static
,当你希望对象是整个程序的生存活着,内函数调用保持其状态.如果您在多线程环境中工作,static
则将为所有线程共享相同的对象,因此需要同步.
您可以使用malloc
,当你明确地想要控制的object.for如寿命:确保对象活得足够长,直到的函数调用的函数调用后访问它(自动/本地对象将会被释放,一旦范围{ }
的功能结束).除非调用者显式调用free
已分配的内存,否则直到操作系统在程序退出时回收它.
归档时间: |
|
查看次数: |
5049 次 |
最近记录: |