INTERVIEW #1
一、数据对齐存储
在32位系统中:int占4Bytes,short占2Bytes,char占1Byte,加起来应该是7Bytes,但是下面这段代码输出却是8。
#define _CRT_SECURE_NO_WARNINGS #include <iostream>
#include <cstdio> using namespace std; struct Node {
int x;
short y;
char c;
}; int main()
{
printf("%d\n", sizeof(Node)); return ;
}
计算机对于基本类型数据在内存中的存储位置有些限制,即内存对齐。
处理器取数据一般不按照单个字节,而是双字节、四字节等进行,假设这种存取粒度为4Bytes,也就是说处理器只能从首地址为4的倍数的地址读取数据。如果没有对齐存储,取数据会很麻烦,可能需要两次读取并且剔除掉无用的字节。
每个编译器都有默认的对齐模数,那么有效对齐值=min{对齐模数,结构体中最长数据类型长度}。
规则1:第一个成员offset为0,其后成员的offset=min{有效对齐值,该类型字节数};
规则2:结构体总大小必须为有效对齐值的整数倍,否则编译器会自动填充。
再看前面的例子,int占0~3,short占4~5,char占6,总长度为7,不是4的整数倍,所以地址7是填充字节,共8Bytes。
二、栈&堆(不是数据结构中的栈和堆)
1、内存栈区
编译器自动进行分配和释放,存放局部变量、函数的参数等。
Windows下栈向低地址扩展,大小只有几MB,如果开一个很大的局部数组,就会提示stack overflow。
2、内存堆区
malloc或者new返回的内存区域,使用完需要用户free或delete,否则容易内存泄漏。如果程序员不释放,那么结束时由操作系统回收。
堆向高地址扩展,由于系统采用空闲链表存储空闲内存,所以是不连续的。系统在收到内存申请的请求后,会由低地址向高地址遍历空闲链表,找到第一个满足的空闲块,删除该结点,并将该块的首地址返回。如果分配的空间大于申请的,会将剩余部分重新链接回空闲链表。
//在Heap中开辟10Bytes,同时在Stack中压入p,p的值为10Bytes的首地址
char* p = new char[];
3、常数区
存放字符串常量等,程序结束由系统回收。
4、静态区
存放全局变量或者静态变量,初始化的和没有初始化的分别存放在不同的区域,程序结束后由系统释放。
5、代码区
存放程序代码。
三、其它
排序复杂度、人工智能概念、模型的建立等。
INTERVIEW #1的更多相关文章
- Pramp mock interview (4th practice): Matrix Spiral Print
		March 16, 2016 Problem statement:Given a 2D array (matrix) named M, print all items of M in a spiral ... 
- WCF学习系列二---【WCF Interview Questions – Part 2 翻译系列】
		http://www.topwcftutorials.net/2012/09/wcf-faqs-part2.html WCF Interview Questions – Part 2 This WCF ... 
- WCF学习系列一【WCF Interview Questions-Part 1 翻译系列】
		http://www.topwcftutorials.net/2012/08/wcf-faqs-part1.html WCF Interview Questions – Part 1 This WCF ... 
- Amazon Interview | Set 27
		Amazon Interview | Set 27 Hi, I was recently interviewed for SDE1 position for Amazon and got select ... 
- Java Swing interview
		http://www.careerride.com/Swing-AWT-Interview-Questions.aspx Swing interview questions and answers ... 
- Pramp - mock interview experience
		Pramp - mock interview experience February 23, 2016 Read the article today from hackerRank blog on ... 
- 【Codeforces 738A】Interview with Oleg
		http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ... 
- [译]Node.js Interview Questions and Answers (2017 Edition)
		原文 Node.js Interview Questions for 2017 什么是error-first callback? 如何避免无止境的callback? 什么是Promises? 用什么工 ... 
- WCF学习系列三--【WCF Interview Questions – Part 3  翻译系列】
		http://www.topwcftutorials.net/2012/10/wcf-faqs-part3.html WCF Interview Questions – Part 3 This WCF ... 
- WCF学习系列四--【WCF Interview Questions – Part 4 翻译系列】
		WCF Interview Questions – Part 4 This WCF service tutorial is part-4 in series of WCF Interview Qu ... 
随机推荐
- django-rest-framework限流
			django-rest-framework限流 在项目根目录下新建utils的文件 新建throttling.py from django_redis import get_redis_connect ... 
- NumPy学习2:创建数组
			1.使用array创建数组 b = array([2, 3, 4])print bprint b.dtype 2.把序列转化为数组 b = array( [ (1.5,2,3), (4,5,6) ] ... 
- 虚拟机安装windows sever2008
			1.打开并进行新建虚拟机 2.默认选择“典型” 3.选择“安装程序盘映像文件”,并‘浏览’选择本地的文件 4. 5.后面的默认选择即可,安装路径可自己修改 6.这一步的磁盘大小可自己修改的,这里先预设 ... 
- ES6构造函数class 和 ES5构造函数语法
			构造函数就是JavaScript程序定义好的函数,我们直接使用就可以,实际也是一种函数,构造函数专门用于生成定义对象,通过构造函数生成的对象,称为实例化对象 构造函数分为两种,一种是JavaScrip ... 
- CTE(With As)
			WITH tabdate(dt) AS ( FROM dual UNION ALL FROM tabdate WHERE dt ) SELECT * FROM TabDate ; 一.With Tab ... 
- javascript实例教程使用canvas技术模仿echarts柱状图
			canvas 画布是HTML5中新增的标签,可以通过js操作 canvas 绘图 API在网页中绘制图像. 百度开发了一个开源的可视化图表库ECharts,功能非常强大,可以实现折线图.柱状图.散点图 ... 
- 女屌丝前端逆袭记(一)之浅谈float
			提到前端,相信作为开发者的你或是正在看这篇文章的你并不陌生.前端可以说是直接与用户打交道的一个端口,不论是页面前端亦或是后端界面的前端,都是直接与用户对接的,因此前端设计对于一个网站或管理系统,都是至 ... 
- Say goodbye
			Since September 28th 2015 Scriptogram officially closed. We considered every option before making th ... 
- .NetCore对接各大财务软件凭证API——金蝶系列(1)
			哈喽,又和大家见面了,虽然看文章的小伙伴不多,但是我相信总有一天,自己写的这些文章或多或少会对其他人有些帮助,让他们在相关的业务开发下能少走些弯路,那我的目的就达到了,好了,今天就正式开始我们的系列了 ... 
- 破解idea2019版本至2089年(windows系统)
			1.首先必须安装idea,然后找到安装目录下的bin目录下面 2.编辑俩个以.exe.vmoptions的文件(俩个文件的最后一行都得这样写) 3.重新打开idea,找到help下面的Register ... 
