一、数据对齐存储

在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的更多相关文章

  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 ...

  2. WCF学习系列二---【WCF Interview Questions – Part 2 翻译系列】

    http://www.topwcftutorials.net/2012/09/wcf-faqs-part2.html WCF Interview Questions – Part 2 This WCF ...

  3. WCF学习系列一【WCF Interview Questions-Part 1 翻译系列】

    http://www.topwcftutorials.net/2012/08/wcf-faqs-part1.html WCF Interview Questions – Part 1 This WCF ...

  4. Amazon Interview | Set 27

    Amazon Interview | Set 27 Hi, I was recently interviewed for SDE1 position for Amazon and got select ...

  5. Java Swing interview

    http://www.careerride.com/Swing-AWT-Interview-Questions.aspx   Swing interview questions and answers ...

  6. Pramp - mock interview experience

    Pramp - mock interview experience   February 23, 2016 Read the article today from hackerRank blog on ...

  7. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  8. [译]Node.js Interview Questions and Answers (2017 Edition)

    原文 Node.js Interview Questions for 2017 什么是error-first callback? 如何避免无止境的callback? 什么是Promises? 用什么工 ...

  9. WCF学习系列三--【WCF Interview Questions – Part 3 翻译系列】

    http://www.topwcftutorials.net/2012/10/wcf-faqs-part3.html WCF Interview Questions – Part 3 This WCF ...

  10. WCF学习系列四--【WCF Interview Questions – Part 4 翻译系列】

    WCF Interview Questions – Part 4   This WCF service tutorial is part-4 in series of WCF Interview Qu ...

随机推荐

  1. 课程登记窗口java

    设计窗口,实现课程的登记,并且将相应的数据写入文件之中.保证的是课程名称不可以重复,对于任课老师必须是在已经设定好的五位老师之中.并且上课地点也是在预先设定的范围内.窗口可以持续进行保存,数据将在判断 ...

  2. Linux CentOS7 开通端口外网端口访问权限

    一.查看系统防火墙状态(如果返回 running 代表防火墙启动正常)firewall-cmd --state二.开启端口外网访问1.添加端口 返回 success 代表成功(--permanent永 ...

  3. buuctf misc wp 02

    buuctf misc wp 02 7.LSB 8.乌镇峰会种图 9.rar 10.qr 11.ningen 12.文件中的秘密 13.wireshark 14.镜子里面的世界 15.小明的保险箱 1 ...

  4. D3js怎么获得SVG及其子元素在屏幕中的坐标

    var clientRects = svg.select("image").node().getBoundingClientRect(); var coordinates = [ ...

  5. MVC学习的心路历程

    2020/4/17 之前接触过三层架构,但是没有接触过mvc,所以有点蒙,所以现在在一步步构建思路. 1.了解MVC的发展,做一个简单的项目.

  6. F - Minimum Sum LCM

    LCM (Least Common Multiple) of a set of integers is defined as the minimum number, which is a multip ...

  7. 基础_TCP/IP

    概念明确: 1:TCP/IP代表传输控制协议/网际协议,指的是一系列协议  为什么会叫TCP/IP.因为用的多, 2:HTTP 是属于应用层的协议 3:OSI七层模型和TCP/IP 平等,只是TCP/ ...

  8. 深入理解Java线程状态转移

    目录 前言 状态转移图 1.0 新建态到就绪态 1.1 就绪态到运行态 1.2 运行态到就绪态 1.2.1 时间片用完 1.2.2 t1.yield() .Thread.yield(); 1.3 运行 ...

  9. Python巩固 - 第N天

    一.函数解释: def fact(n, m = 1): s = 1 for j in range(1, n+1): s = s*j return n, m, s//m print(fact(10, 5 ...

  10. 百度关键词搜索工具 v1.1|url采集工具 v1.1

    功能介绍:关键词搜索工具 批量关键词自动搜索采集 自动去除垃圾二级泛解析域名 可设置是否保存域名或者url 持续更新中