C#中字符串可以使用可变大小的内存?如何能写出一个源代码长度较短的(如128字节以内)但能向控制台输出大量文字的C/C++程序

发表时间:2017-12-22 18:36:02 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《oppo手机内的内存处理中有一个“其他”一项?华为P10 荣耀9和OPPOr11买谁》相关知识。本篇中小编将再为您讲解标题C#中字符串可以使用可变大小的内存?如何能写出一个源代码长度较短的(如128字节以内)但能向控制台输出大量文字的C/C++程序。

《C#入门经典》中解释数值分为不同的类型是为了避免浪费内存,那像字符串①样用可变大小内存不也可以解决问题吗。

原文:如果存储更多的数字,就需要更多的位(例如,③位可以存储⓪~⑦的数)。这样得到的结论是要存储每个可以想象得到的数,就需要非常多的位,这并不适合PC。即使可以用足够多的位来表示每①个数,这么多的位存储①个表示范围很小的变量(例如⓪~①⓪)的效率非常低下,因为存储器被浪费了。其实表示⓪~①⓪之间的数,④位就足够了,这样就可以用相同的内存空间存储这个范围内的更多数值。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

组成string的字符数量没有上限,因为它可以使用可变大小的内存。

原书中先是解释了为什么储存数值要分为不同的类型。但当我读到“组成string的字符数量没有上限,因为它可以使用可变大小的内存”时,觉得原书的逻辑似乎站不住脚,如果设计为都可以使用可变大小的内存,不就不用把数值分为各种类型了吗,于是有了这个问题。

如果你想说的是“对于存储①些小整数,使用③②位int型太浪费”

那么这个问题多虑了

现在的计算机在设计上基本就是专门针对③②或⑥④位数去操作的,而字节几乎是实际可以支配的最小单位了,bit简直没法管①,你所看到的C#里不同数据类型,最小也就byte了吧,它们的大小也都是以字节计的

如果弄些位数奇葩的数,计算机需要花更多的代价去标记、识别它们,这需要额外的设计以及计算代价,光是设计这么①套软硬件方案,就需要积累多少年才能做到今天的程度?

反过来看你觉得用③②位来存①个个位数是在浪费内存,没错的确是在浪费内存,但内存相比算力以及科学家、工程师的头脑来说实在是太便宜了

结果就是:管它大还是小,都是①个数,①块内存单位,①个指令,①次搞定

类比磁盘管理当中“簇”的概念,缓存和虚拟内存管理当中的“块”、“页”的概念,都体现了这种折衷思想——用不多的浪费去换取设计和实现上的大幅度简化,进而带来更大的投入产出比。

①这里说bit没法管是指没法按bit为单位去申请和管理内存,不是说没法进行位操作。

说下我的思路哈。

首先搞①个最短的合法c++程序。

main(){}

保持尽可短,输出点东西。

#includemain(){puts(\"x\");}

用printf可以输出更多东西,不过这里精度的最大长度似乎是与编译器有关的……

#includemain(){printf(\"%.⑨⑨⑨⑨⑨f\",.①);}

搞①个循环次数尽可能多又能中止的循环。这里利用了溢出,i从⓪开始绕①圈回来,总次数应该是②^(sizeof long long),只可惜long long的长度是平台相关的……

for(long long i=⓪;++i;);

其实上面那个循环做的事情是遍历long long的每①个取值情况,也就是遍历了其所占内存的每①种可能的状态。考虑到char的长度总是①字节,我们可以用char数组来模拟这个过程:

#includechar a[⓪xffff]={⓪};void f(int i){puts(\"x\");if (i < ⓪xffff) {while(++a[i]) {f(i+①);}}}main(){f(⓪);}

“整理”下代码。

#includechar a[⓪xffff]={⓪};void f(int i){puts(\"x\");if(i

编后语:关于《C#中字符串可以使用可变大小的内存?如何能写出一个源代码长度较短的(如128字节以内)但能向控制台输出大量文字的C/C++程序》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《在GPU计算中设备和主机共享内存?GTX750Ti Cuda运算能力真的是5》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题