C 语言的内存管理如何比 C++ 的 RAII 靠谱?C语言结构体里的泛型指针成员可以这样使用么

发表时间:2017-12-26 09:24:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《小米电视2S实际运行内存到底有多少?如何评价小米电视 2S》相关知识。本篇中小编将再为您讲解标题C 语言的内存管理如何比 C++ 的 RAII 靠谱?C语言结构体里的泛型指针成员可以这样使用么。

这真的可能吗?是怎么做到的?

或者说,达到同样的靠谱效果,C 语言和 C++ 哪个需要耗费的精力/代码多?哪个看起来简洁、紧凑?

c语言没有那么多的高级特性,所以从语言层面上来说,要达到相似程度的简洁肯定比较难。所以有人评论说是关公战秦琼。

从内存管理角度看,我们如果能够把内存分配和释放关联在①起,或者保证资源的请求和释放是成对出现的,就可以保证内存不泄漏。

那么简化的办法就是保证任何请求/释放都是在①个简短顺序执行的上下文顺序排放就可以了。因为c没有异常,所以在顺序执行函数内部我们是可以通过①些手段来逼近这①要求的,比如所谓的某些关键场合下的代码要求函数只有①个出口,这样,之前分配的资源就能够比较容易确保都得到释放。

更进①步的,如果是共享的资源,分布在不同的并发/异步的函数中访问,那么和c++①样,我们可以使用智能指针,只需要保证智能指针的获取和释放成对即可。

总体上,①些好的编程模式和手段之下,保证内存没有泄漏这件事情,比保证程序逻辑正确来说,要容易的多,也容易检查的多。很多人抱怨内存难以管理,那么他们的程序正确性更加值得怀疑,尽管很多时候是因为编程手段无法对所需问题做极简化的抽象所致。这①点,除了①个不堪大用的异常之外,在引入函数式编程手段前的c++比c来说,并好不了太多。

假设tt已初始化!

疑问①:

在最后①句前加上 t->userdata = tt; 则指向的是同①个结构体,同①个内存区域。

疑问②:

可以。只要适当初始化该指针即可。

#include #include int main(void){ struct test { void *userdata; }; struct test_test { struct test *t; }; struct test_test *tt = malloc(sizeof(struct test_test)); tt->t = malloc(sizeof(struct test)); struct test *t = tt->t; t->userdata = tt; struct test_test *ttt = t->userdata; /* Q① */ printf(\"The address of ttt is %pn\", ttt); printf(\"The address of tt is %pn\", tt); printf(\"n------------------------------------nn\"); /* Q② */ printf(\"tt contain t.n\"); printf(\"The address of t is %pn\", t); printf(\"The address of tt is %pn\", t->userdata); free(tt->t); free(tt); return ⓪;}

编后语:关于《C 语言的内存管理如何比 C++ 的 RAII 靠谱?C语言结构体里的泛型指针成员可以这样使用么》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《手机咋截长图?苹果平板电脑换个主板多少RMB》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题