struct 内嵌结构体内存存放形式?
如果struct里面有struct结构的话那么里面的结构是个整体
如:
struct example1//8
{
short a;
long b;
};
struct example2//4+8+4=16
{
char c;
struct example1 f ; //8
short e;
};
malloc与new区别 ??
new是C++提供的符号,可以重写,想+,-,*,= 如 &classname operator+(){}
在一定程度上内部已经定好的一些原则是改不了的,只是提供一些可以重写,如 &classname operator new(size_t,...)是固定要穿如的长度参数;这个是由语法已经决定了。
而malloc是个函数调用:它代表是要申请空间而已
new它可以有构造函数初始化,delete调用析构函数删除;new是默认情况下是多线程空间不固定的分别配方式保证了安全和内存利用率,当是如果在特殊情况下我们可以通过重写针对于只有单线程或者不是泛型的(即只针对一个类来从写)或者设定每次申请空间都一样;这些优化可以提高时间效率可以提高几个级别;
//即对于内置数据类型来说,二者是等价的(但是梦梦认为这个时候还是malloc/free的效率更好一点)。但是对于非内置数据类型,我们只能选择new/delete 。
//即出于兼容性的考虑,C++里保留了C语言的malloc/free函数
new 有三个字母, malloc有六个字母
new可以认为是malloc加构造函数的执行。
new出来的指针是直接带类型信息的。
而malloc返回的都是void指针
malloc不会抛出异常,但是new会
详细可参考:http://blog.163.com/zl_dream1106/blog/static/84286020104810504140/
c++ 单向链表和双向链表有什么区别?
单向链表删除太麻烦了:假设要删除P指针指向的点,那么要从前面开始找,找到前趋节点然后才开始删除:O(n),如果不找前节点也可以O(1)时间删除:就是把后面的值复制到要删节点,然后删除该节点;但是如果要删除最后一个节点那就出问题了,所以还是要找前趋节点;如果是双链表就直接删除就行了!O(1)
双链表占内存空间大,但删除增加的时候容易;
单链表用于递归方便,但删除增加时候不是那么容易了