答案:
什么是字节对齐:
需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐;常见就是求复合类型大小,比如结构体、联合体。
为什么需要字节对齐
需要字节对齐的根本原因在于CPU访问数据的效率问题。
答案:
从右往左,并且内存中栈是由高向低扩展,所以先入栈的是右边并且地址是高位。
比如printf()函数,也都是先打印最右边。
答案:
有可能,因为malloc是相进程申请虚拟内存,与物理地址空间没有直接关系。
答案:
申请堆内存
说明:
1. malloc 内存未初始化,如果size为0,则malloc()返回NULL或一个稍后可以成功传递给free 的唯一指针值。
2. realloc 如果size_t>原来的s申请的空间大小,比如原来是100个字节,现在是150个字节,那么就有以下两种情况:
3.calloc 申请内存空间后,会自动初始化内存空间为 0。
答案:
指针其实也是个变量,只不过这个变量里面存储的是内存地址。
举例说明:
int * a;指针类型为int *
char *c;指针类型为char *
答案:
占用内存的大小,在32为系统中无论是什么类型的指针都是4个字节。64位为8个字节。
答案:
1.概念
数组:是同种类型的集合
指针:里面保存的地址的值
2.赋值:
同种类型指针之间可以直接赋值,数组只能一个个元素赋值
3.存储方式:
数组是连续的一段空间,指针的存储空间是不确定的
4.修改内容不同
比如:
char p[] =”hello”,我们可以执行p[0] = ‘s’操作原因是p是数组,可以使用下标的方式进行修改数组内容
Char * p = “hello” 执行p[0] = ‘s’是错误的,原因是p是指针,指向字符串常量,常量是不允许修改的
5.所占字节不同
指针永远是4个字节在32为系统中,而数组是不固定的,要看数组的类型和元素个数
答案:
野指针:是指指针指向的地址是不确定的;
原因:释放内存之后,指针没有及时置空;
避免:
答案:
智能指针是个类,用来存储指针(指向动态分配对象的指针)。
C++程序中使用堆内存是非常频繁的,堆内存的申请和释放由程序员手动管理,这很容易造成堆内存的泄漏,使用智能指针能更好的管理堆内存。
答案:
为了解决循环引用导致的内存泄漏,引入了weak_ptr。
答案:
对于一维数组来说
num+1是偏移到下个元素,&num+1是偏移整个数组
对于二维数组来说
num+1是偏移一个一维数组,&num+1是整个数组
答案:
直接的原因是为了支持运算符重载。
用指针的使用经常犯得错:
1. 操作空指针,
2. 操作野指针,
3. 不知不觉改变了指针的值,而后还以为该指针正常。如果我们要正确的使用指针,我们不得不人为地保证这三个条件。而引用的提出就解决了这个问题。
引用区别于指针的特性是 :
1. 不存在空引用(保证不操作空指针);
2. 必须初始化(保证不是野指针);
3. 一个引用永远指向他初始化的那个对象(保证指针值不变)
到此这篇存储测试面试题(存储工程师面试题目)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/te-aq/18551.html