C++的结构体可以声明成员函数的疑惑?讲C语言内存管理的书籍或者博客
类似这样
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等①些其他编程语言。
我当时只看到了多线程同步的部分,个人感觉从中得益颇大的。
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
