V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  funcman  ›  全部回复第 17 页 / 共 30 页
回复总数  581
1 ... 13  14  15  16  17  18  19  20  21  22 ... 30  
C#相对于C/C++的优势在于,C#有垃圾回收。

垃圾回收的好处,不在于可以使经常忘记free内存的菜鸟也能写代码。

一个复杂的系统,对象会在很多个作用域中被引用。作用域与作用域之间,如果还要交换对象的引起情况,那系统模块间的耦合就太大了。简单的系统应该是,我在这个作用域中引用了一个对象,不需要关心这个对象是否在其它作用域被引用。既然不关心,那么也没办法靠判断来决定是否释放对象。对象什么时候释放,应该由一个底层的机制来解决。如果没有这种机制,再小心的老手,也写不出没有内存资源泄露的程序。

C/C++编写系统,一般靠引用计数来管理对象何时才能消亡。如果不用引用计数,那只能统一生产对象再统一释放,内存够倒还好。C/C++其实也有一些垃圾回收(gc)工具库,不过应用得不广泛。gc能回收的内存,必须是gc提供的内存分配功能获取的内存。但是C/C++有自己的malloc/free,可能会出现free掉gc管理的内存的情况。C++标准其实想加入gc,但是手动管理的存在,一直不太好加。

大多数时候,引用计数够用了,gc毕竟太复杂。底层的东西,太复杂不大好。微软以前长久地被dll地狱问题困扰,到.Net Framework的推出时才得以解决。而Linux、OSX这些系统,只不过简单的约定了一下版本号,就解决了这个问题。微软在.Net Framework上花了巨大的精力,结果现在还是有很多人不用它。
C++还是.Net,要看做什么。

.Net做项目,考虑到XP用户没有装.Net Framework,需要把.Net Framework打包进安装程序。安装包会比较大,并且安装速度稍慢。这样,用户体验就要差一些。所以很多流行的免费软件不用.Net

.Net经常被说成COM的升级版。用COM的软件,发布起来就有点麻烦了。需要做一下DLL注册。而国内用户经常喜欢可以“绿化”的软件,直接拷来就用,连安装都不要了。

C++做的桌面应用,就没这些麻烦。把所有依赖的DLL都放到EXE目录下,就能跑,不需要装重量级的库。(如果用到COM接口的库,还是需要注册一下)

开发游戏,主要用C/C++,和诸如Lua、Python这样的脚本语言。但是游戏开发需要写很多编辑器供策划和美术使用,编辑器使用的技术也就是桌面应用开发的技术。目前这块,.Net和Qt是最流行的;MFC也有使用,但它实在不适合快速开发,用得极少;另外也有使用C++Builder的,只不过C++Builder被宝兰卖给小厂了,没多少影响力,但是用它开发编辑器还是蛮舒服的。

.Net在编辑器开发上的主要问题是,.Net有自己的内存模型,和C++的模型不太一样,调试时容易被坑。游戏引擎肯定是本地代码的,编辑器肯定需要调用引擎代码。实现起来倒不难,不需要把引擎包成.Net的DLL,直接用.Net的C++/CLI来写

游戏引擎肯定是本地代码的,编辑器要调用游戏引擎,游戏引擎一般以dll的形式为引擎提供功能。如果用C#来做,需要把引擎的dll用C++/CLI包装成托管dll。但其实直接用C++/CLI来写编辑器就挺好的,没必要用C#。参考资料看C#的就可以了,反正都是调用.Net Framework的库,语法上有些不同。不过托管代码和本地代码的内存模型不同,调试起来会遇到坑。
@rteta 写桌面不太需要算法。排序算法学一学即可,图的算法都很少用到。做这个几乎不需要你设计算法,用已有的即可,会编程实现就行。
一般这种问题都卡住,说明你买的书不好,多买几本书对照着看。

桌面应用的话,Windows上,如果长期跟进维护的,一般用.Net;如果是面向大众的,一般用C++。

Java也是行业用得比较多,国内用得不多,国内主要用Java做Web应用。
2013-08-03 13:12:52 +08:00
回复了 Geeker 创建的主题 问与答 如何委婉而有效地劝同事不要在办公室里抽烟?
一般来说,最好的办法是善意地告诉他们吸烟有害健康。
2013-07-27 23:37:22 +08:00
回复了 tarsier 创建的主题 Linux gcc/g++针对特定的intel架构处理器有何编译优化选项?
@hadoop 一点不高端,汇编是本科必学的,看gcc生成的指令汇编只需要加参数就行了,Intel的指令集都可以查到,gcc可以内嵌汇编,还可以链接nasm等汇编器生成的lib。如果真的需要这些东西,学起来并不难。我第一次接触MMX指令时,连汇编都不太会,抄一抄大致也懂了。

另外,实际上主流编译器都支持内置函数的方式调用Intel的这些SIMD指令功能。这个我前面忘记讲了。

不想弄这个,就加编译参数呗,黑盒的方式测一下性能,应该也提升了不少。
2013-07-27 22:29:51 +08:00
回复了 tarsier 创建的主题 Linux gcc/g++针对特定的intel架构处理器有何编译优化选项?
如果你真的需要这方面的优化,那么你应该不会满足于别人的介绍,而是自己去看一下编译器生成的汇编。编译器的优化不够劲的时候,你还会自己去写一些汇编代码。
2013-07-21 05:38:12 +08:00
回复了 juicy 创建的主题 程序员 编程编到一定阶段之后,大家都有没有遇到这样的阶段?
人不要以自己为上帝。
你在想什么设计比较好,其实就是在想什么设计最好。
满足需求就行,顶多照顾一下算得到的潜在需求。
最好连潜在需求都别照顾,因为潜在需求其实就是个大坑。
保持轻量,保持简单。
千万不要跳入完美主义的深坑。
2013-07-20 23:55:49 +08:00
回复了 juicy 创建的主题 程序员 写程序最痛苦的部分。。。
放弃完美主义吧。
2013-07-17 12:40:57 +08:00
回复了 Ricepig 创建的主题 站长 关于备案,说说我的备案经历吧
做过阿里的备案,还行,三天材料全部填完,一周就过了。
没备完不能上线是真麻烦,不过这时候服务器是可以开的,备案不检查服务器有没有开,只检查域名是否开着的。

其实跟公家打交道不是很难,材料填全,该交的钱交足,就OK了。
难办的事,要不完全不行,要不还有代理公司做呢。

备案这事,老共还真特别上心,备完了过段时间还要他们电话回访确认一下。

另外,不知道我以公司身份去注册论坛网站能不能过。
去年一千七帮人做了个站,全套信息密码都填了自己的,因为抢域名优惠,没时间慢慢问对方要填成什么样的。后来看客户也不是很懂,就帮他们持有这些东西了。结果网站他们也不怎么用,我就更懒得改了。过几天有些东西要到期了,还得通知他们,问问他们续费不~

网站麻烦事太多。当时刚接活,玩票的一单,价格太低了。幸好客户也不是很折腾。我做个软件,一套买个几份,也就改改软件的名字,开发时间也就一个月的事。做网站,买别人的程序,还得自己做图,折腾死了。还有个现象,客户一般显得对网站更懂一些,爱指挥。

反正做事不能将就,强身健体,去交高素质的客户。
2013-07-08 04:08:33 +08:00
回复了 zzWinD 创建的主题 程序员 米美國有程序員工會嗎?
如果是以维护薪酬、福利为目的的工会,那就完全没必要了。

工会跟资方谈待遇不公,如果服务的对象是工人,那么一定是为一批工人服务。如果有程序员工会,那么工会派人来为某一个人谈工资么?为一批人?阿里、腾讯才多少人?你们公司才几个人?阿里、腾讯的工资是业界标杆,不用谈了。你们公司那么几个人的小事,也不用谈了,不然这个程序员工会要成立工会工作者工会了。

工会组织罢工争取不加班,不加班的公司肯定不罢工啦,加班但是项目前景好且需要加班的公司肯定还是照样加班啦。人家工厂加一个小时多生产一个小时的产品,我们搞开发加一个小时班浪费一个小时电。那些傻逼加班的IT公司早该死掉了,谁在里面待着谁早该跳槽了。这事弄个工会来解决,有些不对劲吧。

所以程序员这个职业,根本不需要工会这种东西。至于行会,我们又更好的社区组织方式,走互联网的,成本低范围广。
2013-07-07 01:52:47 +08:00
回复了 flowerpiggy 创建的主题 程序员 蛋疼投票,左花括号跟后面还是另起一行?
跟C语言作者的风。
但是团队遵守团队的规范。
2013-06-23 21:41:55 +08:00
回复了 zorceta 创建的主题 程序员 OpenGL的筒子们,你们都用的什么库?
@zorceta 现在跨API是主流做法。做一套3D引擎,不可能只考虑PC或者只考虑移动平台。
2013-06-23 12:32:33 +08:00
回复了 zorceta 创建的主题 程序员 OpenGL的筒子们,你们都用的什么库?
@zorceta OpenGL现在优势在ES上。其实一个平台用一种API挺好的,省很多事。跨API实现起来不难,但是去bug调优很麻烦。
2013-06-23 00:47:44 +08:00
回复了 zorceta 创建的主题 程序员 OpenGL的筒子们,你们都用的什么库?
@zorceta 现在PC游戏主要用D3D啊。
虚拟就是VR啊,比如Google地球这种。
@akinoniku 内存管理没什么神秘的。申请了就得释放,谁来释放以及什么时候释放。C都是自己手工完成。新的语言基本上都有自己的一套方便的东西。

一个对象实例,会在出生时,申请一份内存空间。当这个对象完成它的使命时,就可以释放掉它占用的空间。对象存在作用域中,一般来说,出了作用域,这个对象就不需要了,可以删了。还有种情况,这个对象有其它作用域中的引用。就是说其它作用域中,有指向同一内存空间的一个东西。那么这时候,这块内存空间就不能随便释放了。必须等到没有东西指向它(即引用它)时,它才可以被释放。那么怎么知道有没有东西引用这块内存呢,就可以用个计数器。内存刚申请时,计数器为1,引用一次,加1。释放时(主要是出作用域时的隐性释放),先给计数器减一,等计数器为0时,才真的去释放这块内存。这就是内存管理上的引用计数技术。在ObjC中,有设计好的计数器和语法方便你使用这一技术。而C++这种原始的语言,需要自己写计数器,需要手工减1(也可以用一些语法特性把这事弄简单点)。

Java则使用了重型的扫描式垃圾回收,所以它的内存释放总是不那么及时。

引用计数是目前最好的内存管理技术,方便、高效、可控。而且,没有这个技术,想实现离散的对象控制,只能用别的GC技术了。

不过,自动引用计数是5开始才有的东西。5之前得自己动手。
我初学。我觉得,你现在做iOS开发,能接触到的,貌似除了XCode比较新,硬件参数比较新,库上还是用5之前的。因为要考虑到老机器老版本。

一天之内就可以写个demo,毫无问题。但是写完整的东西,遇到的坑应该不是一两周能搞定的。
毕竟这东西和PC不一样。
2013-06-22 14:33:20 +08:00
回复了 zorceta 创建的主题 程序员 OpenGL的筒子们,你们都用的什么库?
SDL+GLEW

看用OGL做什么。
如果是游戏的话,刚开始就用SDL做前端,省得写Win32窗体代码。等项目成型了再根据需要做Win32窗体。不过现在不太用OGL做PC游戏了。
如果做虚拟的话,QtOpenGL挺好的。
GLUT、GLFW比较适合用在学习OGL上。

@bengol 矩阵变换、3D流水线、Shader
2013-06-15 11:31:28 +08:00
回复了 keyman 创建的主题 Qt 吐槽下QT creator
@jamiesun 多数时候用打印的方式调试就够用了。
1 ... 13  14  15  16  17  18  19  20  21  22 ... 30  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1085 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 28ms · UTC 22:43 · PVG 06:43 · LAX 15:43 · JFK 18:43
Developed with CodeLauncher
♥ Do have faith in what you're doing.