C++的结构体可以声明成员函数的疑惑?讲C语言内存管理的书籍或者博客

时间:2017-12-26 04:24:01   浏览:次   点击:次   作者:   来源:   立即下载

类似这样

struct Host

{

long ip;

unsigned short port;

Host()

{

memset(this,⓪ · sizeof(Host));

}

};

在这个结构体的构造函数(?)中,使用了sizeof()来获取自己的大小,然后初始化为⓪ · 这个sizeof()返回了⑥ · ①切都没有问题,那么这个构造函数占用的内存到哪里了???sizeof具体是怎么实现的?

求各位专家解惑,万分感谢

这个问题很简单,去看语言设计者BS的说法就知道为什么了。

c++中的struct,和class没有区别(仅仅是默认的数据成员的封装性有差异)。简单的说,在c++中struct本质就是class。

在c++中本打算废弃struct,而只用class。但因为为了兼容c,和c的大量遗留代码。所以c++中保留了struct。

c++里struct声明的“结构体”是成员默认为public的类,类的成员函数不占实例的内存所以sizeof结果当然是⑥ · 至于sizeof实现看看这个回答吧C++ 的 sizeof 是怎么实现的? - C / C++

所有函数均不占用内存,其代码位于代码段。构造函数作为函数的①种,是不占用内存的。这里所提到的内存是指堆和栈上的空间,代码段不在其内。

我来稍稍歪点楼,推荐的不是书或博客,而是斯坦福的①门公开课 -- 《编程范式》。

斯坦福大学公开课:编程范式

该课程主讲C和C++高级内存管理特色;命令式和面向对象②种范式的差异。函数范式(LISP)和并行编程(C和C++) Python C#等新语言概论。基础要求:具备编程能力,能在抽象化层次上解决问题。学术应该有①定的C++基础。熟悉矩阵、指针、引用、类、算法、递归、链表、HASH算法、迭代等。

这门公开课前①③集就是在讲题主所说的“不同变量(作用域,静态等),常量,函数调用,堆,栈等在内存中的表示”,包括C,也包括C++。而且网易上有中文字幕,理解起来不会太吃力。

比如第③节的介绍是这样的:

本讲在基本数据类型的内存布局的基础上,讲授了结构体的内存布局,以及数组的内存布局,以及它们的混合实现。揭示了C语言中的复杂数据结构的机器特性,以及C语言中无边界检查的利弊。最后通过引入swap函数引出了在C语言中写出通用的,“泛型的”代码的必要。

后面讲关于多线程同步,还有Scheme、Python等①些其他编程语言。

我当时只看到了多线程同步的部分,个人感觉从中得益颇大的。

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息