堆内存和栈内存

今天的问题 局部变量存储在_______,全局变量存储在______,动态申请数据存储在______。 栈 静态存储区 堆 内存空间 静态存储区(全局变量) 先说最简单的全局变量,包含全局变量和 static 修饰符修饰的静态变量,都是保存在静态存储区当中,并且分为未初始化区域和初始化区域。初始化的全局变量和静态变量保存在一块区域中,未初始化的全局变量和未初始化的静态变量保存在另一块相邻的区域中。 全局变量的生命周期持续到整个程序结束,在程序结束后由系统释放。 对于嵌入式程序来讲,在编译后的 map 文件中就已经确定了全局变量的存储地址位置,通过该 map 文件就可以进行全局变量的调试读取等操作。 栈区(局部变量) 局部变量定义在栈内存中,包括函数的参数值,局部变量定义等。栈区的分配和释放由系统自动进行,分配和释放的速度快,但内存空间也有限,栈区向地址减小的方向增长,分配失败会提示栈溢出错误。栈的内存空间是连续的。 栈也可以手动进行空间分配,使用 alloca 函数进行,但无需程序员进行释放操作。 栈区 windows 下默认在1M左右(VS2010),与编译器有关。 堆区(动态申请数据) 动态申请数据保存在堆内存中,包含 new 和 malloc 分配的空间。由程序员进行手动分配和释放的操作,存储空间大,堆区向地址增大的方向增长,但分配、释放、修改速度慢。 堆区的实现是通过一个链表保存所有空闲的地址空间,在程序进行动态分配内存的时候,根据链表进行检索第一个足够大小的空间分配出去,并从链表中删除此处空间。相对应的在释放的时候同样将释放的空间添加到链表当中去。也因此,堆的内存空间是不连续的,也会因为大量的 new 操作产生内存碎片。 因为堆区的分配和释放完全由程序员手工完成,所以需要特别注意分配的空间必须手动释放掉,防止野指针和无法访问到的内存空间的问题出现。 堆区的大小由程序的32bit或者64bit以及编译器共同决定。32bit程序最大堆大小为2GB,64bit程序在不使用虚拟内存的情况下最大为128GB,开启虚拟内存的情况下理论为16TB。 文字常量区 保存常量字符串的区域。程序结束后由系统释放。 程序代码区 程序代码区,存放二进制代码。 具体问题 char* p = "Hello World1"; char a[] = "Hello World2"; p[2] = 'A'; a[2] = 'A'; char* p1 = "Hello World1"; 行1 中 p 在栈区中,字符串在文字常量区中 行2 中 a 在栈区中,字符串在栈区中 行3 错误,文字常量区中不可修改 行5 中 p1 的值与 p 相等,因为编译器优化将两个相同字符串定义到同一位置 NOTES 在使用 new 或者 malloc 申请空间后要判断返回值是否为 NULL ,是否正常申请到内存空间。 为数组和动态申请内存赋初值。 避免数组下标越界。 在合适的时间释放 new 或者 malloc 申请的内存空间。 free 或者 delete 空间后,将指向该空间的指针赋值为 NULL ,防止出现野指针。 避免在栈区(局部变量)定义大数组,使用 malloc 或者全局变量使其定义在堆区或者静态存储区。

1 min · 101 words · Jassy

想出去玩?去日本吧!——准备工作篇

很早之前就想去日本转一转,前一段时间终于算是忙中偷闲出去玩了一圈,回来之后也来整理整理出去游玩的过程,也给小伙伴们一个参考。我也是第一次出国玩,所以有没有说明好的地方也希望小伙伴们能提出来~~ 准备工作 这次出行去了京都、宇治、奈良、大阪,去的城市不是很多,这次单独介绍一下出行的准备工作,方便想去的小伙伴单独查阅,下一篇会介绍去的景点,再给大家推荐一下好景点和好吃的! 护照 护照是出国用的身份证,很多小伙伴都已经早早办下来了,我们的护照是准备去日本之后才去办的,到你所在地派出所的出入境大厅办理即可,具体地址等等请上网百度,北科附近可以去牡丹园,走着也不远。护照办理时间大约一个星期,去的时候记得带上200元现金。(不需要提前拍照,不需要提前打印) 签证 去日本的签证分为单次,三年多次和五年多次三种,如果是第一次出国玩(比如我们)一般都是办理单次签证的。签证需要通过旅行社办理,这里我们直接去淘宝解决就好了,价格也不算太贵,正常办理不加急250元左右。按照淘宝商家要求的材料列表每一项提供给商家就可以了,文件材料也不算少,请认真填写。签证一般时间是10个工作日。 注意一: 去日本需要办理银行流水的一份证明,要求年流水高于10W。这份财产证明是必须的,如果自己没有的话,可以提供直系亲属的同样证明,和能证明亲属关系的文件(户口)也可以。但是有一份75所高校的名单,可以简化申请材料,这个申请材料简化指的就是财力证明,适用于75所高校的本科生,研究生,博士生在读和毕业三年内,具体名单可以上网搜索一下(北科是,北航不是)。满足条件的话提供一份学信网的学籍证明就可以了。(如果都办不了怎么办,淘宝,淘宝能找到不需要财产证明的签证,当然价格嘛,也会高不少的 这里备注一下,如果以前是75所高校的,现在在另外一所不是75所高校的地方读研,抱歉,这样不符合75所高校范围内的,还是需要提供财产证明。(替小伙伴的600块钱默哀 注意二: 这里注意按照正常办理流程,你需要先将酒店和飞机订好,再办理日本护照,因为办理日本护照是需要拿在日期间所有的酒店订单和来回机票订单的(备注,民宿胶囊旅馆等不可以),所以一般情况下需要先订酒店和飞机再去办签证。如果不想那么早定,或者住民宿的话,解决办法有二:一是上booking订酒店,一般酒店都是可以免费取消的,订好酒店后去办签证,签证下来了再取消掉酒店就可以了。二就是淘宝,淘宝办理签证可以办理无机酒的套餐,多掏钱就好了。 住宿 订酒店的工作完全在booking上完成,和国内订酒店类似,并且都有中文,没有难度。 另外提醒一下,日本的酒店一般退房时间是十点或者十一点,与国内不同,不要睡过头了。同样入住时间也很晚,一般三点以后。 换汇 这点就看个人消费了,不过可以的话还是少带一些现金,一般情况下买东西或者吃饭或者便利店都可以用信用卡支付的。(甚至我们在便利店使用支付宝直接支付了一单 换汇地点,出门右转中国银行 交通 在日本交通基本靠走(误 如果在日本去的几个城市比较远,比如北海道到东京,请直接买JR PASS,值。 但是如果去的地方距离都不算远,比如我们,可以办理一张icoca卡或者西瓜卡,类似于国内的公交卡,但是!但是!这张卡并没有打折的作用,该花多少还是多少。并且经过我们几天的过程来看,感觉直接用现金也不是很麻烦,基本都是自助售票,所以区别不大。如果喜欢刷卡,就可以办理一张卡在日期间用,在地铁站或者便利店都有充值的机器(叫精算机),并且很多便利店都可以使用这张卡支付,不用担心充值过多花不掉的问题。 网上很多说在淘宝办理这张卡的,对比一下淘宝办理会贵一些,而且到日之后再进行办理也不是非常麻烦,所以还是推荐过去之后再办理(还可能会有限定卡面一类的~~ 从车站怎么去酒店?从酒店怎么去景点?随便走不知道走到哪里了怎么回酒店?请使用 google map 。很多人推荐“乘换案内”这个app,但是是全日文的,用着不舒服斯基,而且我根本不知道我去的地方日文怎么写啊。google map 可以直接敲中文去哪里,然后照着地图走就好了,上手无压力无难度,所有交通相关的查询这一个app足够了。 通信 上网请淘宝,有随身wifi可以用,平均每天不到10元,信号也不错,机场取机场还,推荐。 电话短信?如果没有很重要的事情其实不办也可以(毕竟都微信办公了,我的飞行模式从过去的飞机一直开着到回到北京。。),办的话有个小技巧,可以几个人只办理一个号的国际漫游,其他人把电话短信都转到这一个号上来。(不负责,没真正这样试过 东西 信用卡: 有信用卡最好,不管订酒店还是买东西都会很方便。信用卡最好询问一下是直接日元转人民币还是要转一次美元,如果通过美元的话,会多出换汇的花费。包括网上查到的招商银行的ICB卡,后来确认也是通过美元结算的。我是用的是招商银行的全币种国际信用卡,但是用的时候发现也是用美元记账,有人说免了一次美元转换人民币的, 经济盲表示不懂,总之应该是不亏的。 电压转换器:出行前请检查你的所有用电设备充电器等,日本用电是110V,如果你有只能220V使用的设备,请买一个转换器,有多个这种电器的话,再带一个插排。现在一般的手机充电器或者电脑充电器应该都是可以在110V下使用的。 带 伞 有很多景点或者车站都可以盖章(唐三藏的通关文牒)这个蛮有意思的,喜欢的推荐提前准备一个本本。(哭 带个方便装硬币的零钱包吧,硬币真的超。。。级。。。多。。。到日本会发现很多自助售货机,很多餐馆也都是自动售货,你就会经常一张钞票进去,哗啦哗啦一袋子硬币出来。 语言 (会说英文的一二三四足够了) 不会日语你也能玩的很happy,英语也不会的话,稍微有点不方便,不过也能玩。所以其实对语言要求并不是很高的,上面提到的用的东西基本都是中文的。经常听说日本人的英语发音都不怎么样,但是在服务岗的说英语感觉都蛮标准的,反而感觉自己英语好渣啊。英语会一些基本的日常用语已经足够了(本人四级不过五百六级死活过不去)。吃饭基本靠图片指,买东西基本靠比划。。。旅游的地方基本也都会英语,靠英语玩一圈没什么问题。如果有一些关键的词不好解释的话,不要害羞,掏出你的手机 google 翻译一下,直接拿手机给人家看就是了。(然后对方也 google 翻译了一下中文,用笔抄在一张纸上给我看)。这里顺便提一句,感觉日本的服务人员的态度都超级好,超级有耐心。 这里如果有认识的朋友会日语就更好了,不会的直接拍照问,不要吝啬你的好友资源。 另外有一些翻译软件可以拍照翻译,这个功能也比较有用,推荐也备用一个。因为即使你学会了五十音也不见得能把字都正确的敲出来。 (我在出去之前学了两句日语,一句是“这个多少钱?”,第二句是“能便宜点么?” 买买买 如果要买化妆品的话,一般化妆品在药妆店和高岛屋这两个地方都可以搞定,药妆店出示护照就可以免税了,高岛屋这种商场需要买完之后去免税柜台办理免税手续,另外还会多收取1.1%的手续费。购买的商品分类需要够5000日元才可以免税,有些比如唇膏壳会属于一般商品,也需要一般商品累计满足5000日元才可以免税。免税的商品会封起来,不允许在日本国内使用的,我们的袋子不小心弄破了,但是回来的时候也没有人检查。出于中国人去日本买化妆品的热度,基本我去的地方都有中文导购,放手买吧。。 动漫周边的话,因为我没有去秋叶原(准备下次去!)所以也不太好推荐,只推荐一下大阪有一个日本桥,也是有很多东西的动漫街,在每年的三月份还有活动(虽然我们并没有赶上,只差了两三天)如果去大阪行程时间有富裕的话,去看看吧 基本准备好上面说的这些东西之后,就可以放心地出去玩了,在外面用的东西都不会缺,这次出去玩我们安排的比较随意,所以景点也没有排的非常的满,只去了京都、奈良、大阪几个地方,下一次就来介绍介绍我们去的地方,提前多图预警啊~~

1 min · 56 words · Jassy

智能指针

https://www.cnblogs.com/TenosDoIt/p/3456704.html

1 min · word · Jassy

汉明码——纠错与校验

忘记前一段时间某个时候提到某个事情了,想起来纠错这回事,大概回忆了一下是一个挺有意思的过程,索性重新搜索了一下复习了一遍,把大概原理在这里写一写,权当记录 从小时候说起 小时候妈妈教导我……咳咳,打开方式不太对。 小的时候我的娱乐活动比较少,空闲时间基本上都是在看书中度过的,其中有一本书我记得很清楚,叫做《数学游戏》,里面是各种数学题,很多有趣很多有意思的题目,直到现在仍然对其中的题目印象非常深刻,还有再读一遍的冲动。 好,进入正题,这本书中有这样一个题目: 国王为10天后的生日宴会准备了1000桶酒,不幸的是,其中一桶被下了毒。为了确定哪桶是毒酒,有人提议用死刑犯试毒。毒的潜伏期为10天。问:至少需要多少个死刑犯才能确保找出毒酒?方案如何实行? 以我小学生的智力水平,书中的题目大部分都是这个难度,我也都是直接放弃看答案了,这里我们还是稍微给自己一点时间稍微思考一下: 好的!还是不会! 答案这里使用简单一点的举个例子,比如我们有八桶酒,分别编号0-7,需要几个死刑犯才能试出毒酒呢? 三个 一号罪犯喝 4 5 6 7 四桶 二号罪犯喝 2 3 6 7 四桶 三号罪犯喝 1 3 5 7 四桶 (三个罪犯都撑死了 然后用0和1代表罪犯生存或者死亡,生死和毒酒之间的关系如下 一号罪犯 二号罪犯 三号罪犯 毒桶 解释 0 0 0 0 三个罪犯都没死,0号都没喝 0 0 1 1 只有三号喝了1号 0 1 0 2 只有二号喝了2号 0 1 1 3 … 1 0 0 4 … 1 0 1 5 … 1 1 0 6 三号没死 1357 是好的 除此之外只有 6 号一二号都喝了 1 1 1 7 都死了,有且只有7三个罪犯都喝了 哇,这东西看上去好熟悉,这不就是二进制么!这样三个罪犯就可以通过这样的方法,最大检查 $2^3 = 8$ 桶酒的是否有毒。以此类推的话,1000桶酒需要 $2^{10} = 1024 > 1000$ 也就是十个罪犯来检验。done,问题解决 ...

2 min · 378 words · Jassy