Rico Mariani对Visual Studio不是64位的解释

指针越大,对齐边界越大,数据越稀疏,等效代码也越大。我们就这样将鸡肋的信息融入高速缓存行、代码或是数据,并因此降低了缓冲区命中率。一切,是的,一切都会受到影响。因为处理器缓存并没有增加。系统中其他程序也会受到影响,即使运行的代码没有发生变化。反正我们并不需要额外的内存。除了减速,我们一无所获。

他继续说道,

大多数Visual Stduio并不需要,也无法受益于4G以上的内存。即使有程序包真的需要这么大的内存,也可以用自己的64位进程建立,并且能够无缝集成到VS中无需为其余的部分付费。这在VS 2008中就已经可能了,也许更早。硬把所有的VS拖进64位的世界中,而无视它们的挣扎喊叫,并没有什么太大的意义。

这并不是说无法改善Visual Studio。但Rico Mariani认为,解决方案应当是如何减少VS使用的内存,而非给它更多。

现在,如果我们有某个程序包需要>4G数据,并且还有一个数据访问模型要求以超级常用的接口随时对这些数据进行访问,这种情况下诸如SendMessage这样的函数是无法完成工作的,此时我认为重新考虑存储模型会获得巨大的收益。

VS的空间中有大量的罪犯。我最喜欢投诉语言服务,它在我的整体解决方案中臭名昭著,会加载大量数据,而仅仅提供智能感知中的一小部分功能。但这好像自从2010年后就没有改变过。我常告诫VS组织的人们去考虑解决方案中如果有10k个项目(显示存在的)或50k份文件(也是真实存在的)时,系统应该如何应对。对我来说,将数据全部加载到内存中的方案不太妥当。但如果我们真的、不开玩笑的、有不能节约利用的存储空间,还一定要将数据常驻内存,那么还是将数据从进程中分离开来,放入一个64位的程序包中比较好。

再回到更多寄存器的问题,Rico补充道。

事实也证明了,额外的寄存器对于VS这种交互式应用没什么帮助,比如它不会有大量频繁的计算密集型循环。并且当命中L1时,载荷出栈的性能如此之好,可与寄存器媲美——除了指令编码的长度更糟一些。但其实64位指令编码的长度也好不到哪里去……

所以,没错,见仁见智【你可能不会这么想】,主要是和对计算引擎的显著提升相比,更多的寄存器对于大型应用的作用微乎其微。

这一立场在16位应用程序切换为32位时饱受批评。但在90年代中后期,开发者普遍到处倡导这一转变有益。“既然这样,为什么我们无法从64位的切换中获取同样的收益呢?”,这个问题经常被问到。在后续的一篇标题为64位的Visual Studio——“超级64”位参数的文章中,他解释了区别。

很明显,在有大容量硬盘和可交换内存的前提下,我们编写的任何32位寻址的程序都能够创建为16位的方式(特别是疯狂x86段的问题)。但是这么做能够得到优秀的代码么?能够体验到非凡的工程成本么?我们是在硬件的斗争上耗费大量的时间还是做各有意义的事情?在这种情况下,人们自然想到了非常酷的方式,十分经济地解决了某些问题,因为他们有了内存压力和经济动机这么做。这些是伟大的发明。但在某些方面也是一种疯狂。这种为完成任务而不得不编写的16位代码就只有丑陋而已。

这里,我的假设就不成立了。这些情况下,它不是相同的代码了。16位代码迟钝、丑陋[哔!]以可怕的方式在内存受限的环境中运行,而32位代码则优美简洁,在卓越的算法下,能够直接完成它需要做的工作。因此,相同的代码编码后体积越大运行越慢的现象其实是无关紧要的。它并不是相同的代码!并且众所周知,卓越的算法即便使用更多的内存,也要优于低劣的算法——即使它们更节约内存或代码大小。

这一课适用于我们编写的绝大多数应用程序。如果当某人正在编写计算引擎或者只能历经磨难手动交换内存,切换到64位可能有益。但是大多数情况下,保留32位并减少内存的消耗,将会对应用程序和操作系统所构成的整体产生更大的影响。

本文转自d1net(转载)

时间: 2024-09-14 19:28:50

Rico Mariani对Visual Studio不是64位的解释的相关文章

visual studio 2015生成64位DLL文件

新建一个visual C ++  ->win32项目 点击生成->配置管理器新建一个64位debug位平台 hello.cpp程序代码如下: #include "stdafx.h" #include "jni.h" #include "com_magc_jni_HelloWorld.h" JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello (JNIEnv *

visual studio 2010-win 8 64 系统安装vs2010 进行编程,hello world,debug的时候出错

问题描述 win 8 64 系统安装vs2010 进行编程,hello world,debug的时候出错 解决方案 你的代码呢?看上去是指针一类的问题. 解决方案二: 将解决方案平台改为x86试试.

调试-visual studio 2010问题!!!

问题描述 visual studio 2010问题!!! 事情是这样的,一个MFC多文档程序在我两个同学那里运行没有问题,在我老师的电脑上运行也没有问题,在我电脑上运行也可以,但是不出现视图!!!这个程序理应在运行之后会出现几个视图窗口的(view).我重装了三次系统,重新安装了不同版本的VS2010,最后发现!!!还是无法解决,我就很纳闷了,这个程序我可以调试!但是为什么就不出现视图窗口的,最可气的是其他人都可以,我的笔记本和两个台式机都不行... 解决方案 解决visual studio 2

winform 界面 ribbon visual studio

问题描述 winform 界面 ribbon visual studio 想找一位vs高手,帮我解决这个问题,价格可以商量,我现在是编程初级,想编一个很简单的软件 主要是界面想好看一点,下了个ribbon控件,但是还是觉得界面设计不合理 解决方案 Visual Studio 无法切换到设计界面Visual Studio 单元测试之六---UI界面测试Visual Studio 单元测试之六---UI界面测试---------------------- 解决方案二: 自己找个美工,标注尺寸,切图,

Visual Studio 2010 SP1将支持HTML5和CSS3

在Visual Studio 2010 SP1,微软将为开发人员提供更方便的途径在ASP.NET的基础上利用新技术开发应用程序,包括HTML5和CSS3.随着IE9正式版的逐渐临近,微软想要告诉开发人员,是时候利用HTML5和CSS3带来更加完整的Web体验了. Visual Studio开发团队一位成员表示:"Visual Studio 2010在发布时并不支持HTML5,那么SP1发布时它能支持HTML5吗?是的,在一定程度上是的.尽管(VB2010 SP1)并不支持所有的HTML5规格,不

Visual Studio 2013 新增web项目IIS Express的64位版

使用Visual Studio 2012开发SharePoint的应该都遇到过下面的错误"SharePoint 在32位进程 中不受支持",而怎么修改目标平台都不好使,因为VS 2012所配备的IIS Express是32位的,而 SharePoint程序是64位的,所以存在不兼容. 当然,还可以通过调试本地IIS,而不调试IIS Express来解决,但是比较麻烦.今天偶然间使用VS 2013,发现新添加了针对Web项目的IIS Express 64位版,不知道大家是否都知道了?!不

升级到Visual Studio 2008的十大技巧

升级到Visual Studio 2008,来个飞跃.Visual Studio 2008最近发布了,开发者经常希望自己成为安装他们最青睐开发工具最新版本的第一人.但是,若在升级过程中做出了错误的选择的话,就会为之付出一些代价.由于Jon Galloway等人,确保了升级过程是一个平稳的过程,而且只有十步之遥. 1.首先,小心的卸载所有先前发布的相应软件和模块 这是最重要的步骤之一.如果您有任何先前版本的.NET Framework 3.5或Visual Studio 2008,那么这些软件都必

总是弹出visual studio 实时调试器 三种解决办法

最近服务器老是弹出visual studio 实时调试器很是郁闷呀.关还关不掉.怎么解决呢 ,现像如下图所示: 下面我们一起来分析一下这种情况的原因: 弹出应用程序: Visual Studio 实时调试器: 发生了未处理的异常("下标越界: '[number: 0]'"),发生位置是 w3wp.exe [2472]. 对此异常的实时调试失败,错误为: 安装的调试器都没有启用实时调试.在 Visual Studio 中,可以从"工具"/"选项"/

Ubuntu 15.04系统怎么安装Visual Studio Code 2015?

  不是我不明白,这世界变化快!微软面向 Linux 平台推出了 Visual Studio 2015!昔日的对头,如今正走向融合.这么喜大普奔的事,我准备挑战一下微软重量级软件在 Linux 平台上的安装.然没想到哇.根本没有我想象中的挑战性.看完你就知道了. 1.百度 "Visual Studio Downloads"这一溜关键词,在搜索结果中打开 Visual Studio 的主页. 2.可以看到页面上有三个磁贴状方块,最右边的是 Visual Studio Code,我们点击它