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 ...
随机推荐
- 【php】php操作MySQL数据库
一.操作步骤: 1. 连接MySQL数据库并判断是否连接成功2. 选择数据库3. 设置字符集4. 准备SQL语句5. 向MySQL服务发送SQL语句6. 解析处理结果集7. 释放结果集,关闭数据库连接 ...
- Hadoop(八):YARN框架简介
YARN组件图 Container是YARN框架中对应资源的抽象,封装了运行节点上的资源(内存+CPU) NodeManager负责Container状态的维护,通过心跳,把资源信息(剩余CPU.内存 ...
- Docker基础修炼2--Docker镜像原理及常用命令
通过前文的讲解对Docker有了基本认识之后,我们开始进入实战操作,本文先演示Docker三要素之镜像原理和相关命令. 本文的演示环境仍然沿用上一篇文章在本地Centos7中安装的环境,如果你本地没有 ...
- matplotlib TransformedBbox 和 LockableBbox
TransformedBbox 和 LockableBbox 都是BboxBase的子类.TransformedBbox支持使用变换来初始化bbox, LockableBbox可实现锁定bbox的边不 ...
- 采用TuesPechkin生成Pdf
1.需求 前段时间有个需求,要求把网页生成pdf,找了各种插件,才决定使用这个TuesPechkin,这个是后台采用C#代码进行生成 2.做法 我要做的是一个比较简单的页面,采用MVC绑定,数据动态加 ...
- Go中的unsafe
unsafe 最近关注了一个大佬的文章,文章写的非常好,大家可以去关注下. 微信公众号[码农桃花源] 指针类型 我们知道slice 和 map 包含指向底层数据的指针 什么是 unsafe 为什么会有 ...
- 动态网页D-html
BOM(Browser Object Model)浏览器对象模型 window对象(window – 代表浏览器中打开的一个窗口) 1.alert()方法 – 定义一个消息对话框 window.ale ...
- Teradata 数据库
笔者大学所学计算机专业,读书时接触过Oracle.mysql和SQL SERVER,一度坐井观天觉得数据库应该也就这些了,但自笔者毕业进入数据仓库这个行业,接触的第一个商业数据库即是Teradata, ...
- vue2.x学习笔记(十二)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12592256.html. 组件基础 组件化是vue的一个重要特性,也是vue学习中非常重要的一个知识点. 基础示例 ...
- linq详细案例
LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...