请问有没有好用的跨平台的C和C++的内存泄漏检测工具?

目录","包含文件"增加VLD的"\include"路径,"库文件"增加VLD的"\lib\Win32"路径,另外动态库"\bin\Win32"路径在安装时已经添加到环境变量里面了,若是未添加,则需要手动拷贝"\bin\Win32"下的文件到工程Debug目录。下 展开查看详细 收起信息 返回顶部 1.新建一个Win32控制台项目; 2.添加代码如下所示: #include

对 Go 语言评价的人是非常多的,在基于自己多编程语言设计和思考的理解外,也可以多看看其他人是怎么想的,有助于多角度的认知。

今天给大家分享的是日常争议很大的王垠所写的《对 Go 语言的综合评价[1]》,看看能不能得到些什么。

以下为原文,内容仅代表王垠本人的评价,不代表煎鱼也一定认同。内容有所修整、格式、排版。篇幅比较长,建议收藏,预留时间阅读。

以前写过一些对 Go 语言的负面评价。现在看来,虽然那些评价大部分属实,然而却由于言辞激烈,没有点明具体问题,难以让某些人信服。

在经过几个月实际使用 Go 来构造网站之后,我觉得现在是时候对它作一些更加 “客观” 的评价了。

Go 比起 C 和 C++ 确实有它的优点,这是很显然的事情。它比起 Java 也有少数优点,然而相对而言更多是不足之处。所以我对 Go 的偏好在比 Java 稍低一点的位置。

Go 语言比起 C,C++ 的强项,当然是它的简单性和垃圾回收。由于 C 和 C++ 的设计有很多历史遗留问题,所以 Go 看起来确实更加优雅和简单。比起那些大量使用设计模式的 Java 代码,Go 语言的代码也似乎更简单一些。另外,Go 的垃圾回收机制比起 C 和 C++ 的全手动内存管理来说,大大降低了程序员的头脑负担。

但是请注意,这里的所谓 “优点” 都是相对于 C 之类的语言而言的。如果比起另外的一些语言,Go 的这种优点也许就很微不足道,甚至是历史的倒退了。

Go 的简单性体现在它的语法和语义的某些方面。Go 的语法比 C 要稍好一些,有少数比 Java 更加方便的设计,然而却也有“倒退”的地方。

而且这些倒退还不被很多人认为是倒退,反而认为是进步。我现在举出暂时能想得起来的几个方面。

以下内容分为进步和倒退两个方面来讲述。

Go 有语法支持一种类似 struct literal 的构造,比如你可以写这样的代码来构造一个 S struct:

这比起 Java 只能用构造函数来创建对象是一个不错的方便性上的改进。这些东西可能借鉴于 等语言的设计。

类型放在变量后面,却没有分隔符。如果变量和它的类型写成像 Pascal 那样的,比如 x : int,那也许还好。然而 Go 的写法却是 x int,没有那个冒号,而且允许使用 x, y int 这样的写法。

这种语法跟 var,函数参数组合在一起之后,就产生了扰乱视线的效果。比如你可以写一个函数是这样开头的:

注意 x, y, z 那个位置,其实是很混淆的。因为看见 x 的时候我不能立即从后面那个符号(, y)看到它是什么类型。

所以在 Go 里面我推荐的写法是把 x 和 y 完全分开,就像 C 和 Java 那样,不过类型写在后面:

这样一来就比较清晰了,虽然我愿意再多写一些冒号。每一个参数都是“名字 类型”的格式,所以我一眼就看到 x 是 int。虽然多打几个字,然而节省的是“眼球 parse 代码”的开销。

类型语法。Go 使用像 []string 这样的语法来表示类型。很多人说这种语法非常“一致”,但经过一段时间我却没有发现他们所谓的一致性在哪里。

这样的语法很难读,因为类型的各部分之间没有明确的分隔标识符,如果和其他一些符号,比如 * 搭配在一起,你就需要知道一些优先级规则,然后费比较大的功夫去做“眼球 parse”。

比如,在 Go 代码里你经常看到 []*Struct 这样的类型,注意 *Struct 要先结合在一起,再作为 [] 的“类型参数”。这种语法缺乏足够的分隔符作为阅读的“边界信号”,一旦后面的类型变得复杂,就很难阅读了。

事实上,在C的世界里面没有特别好的日志函数库(就像Java里面的的log4j,或者C++的log4cxx)。C程序员都喜欢用自己的轮子。printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者输出文件。syslog是个系统级别的轮子,不过速度慢,而且功能比较单调。 

日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录,他有很多移植版(包括官方的和非官方的版本) 

z-log是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。  由难易编写 

 syslog分类模型,基于规则路由过滤,比log4j模型要正确高效,详见为什么log4j的概念模型是错误的。  日志格式定制,类似于log4j的pattern layout  多种输出,包括动态文件、静态文件、stdout、stderr、syslog、用户自定义输出函数  运行时手动或自动刷新配置(同时保证安全)  高性能,在我的笔记本上达到338’638条日志每秒, 大概是syslog(3)配合rsyslogd的1000倍速度   高可靠性和速度之间的平衡,用户自定义多少条日志后fsync数据到硬盘  用户自定义等级  多线程和多进程环境下保证安全转档  精确到微秒  简单调用包装dzlog(一个程序默认只用一个分类)  MDC,线程键-值对的表,可以扩展用户自定义的字段  自诊断,可以在运行时输出zlog自己的日志和配置状态  不依赖其他库,只要是个POSIX系统就成(当然还要一个C99兼容的vsnprintf)  

网友提供的其他版本,方便其他平台安装 

非常快只包含头文件无需依赖第三方库支持跨平台 - Linux / Windows on 32/64 bits支持多线程可对日志文件进行循环输出可每日生成日志文件支持控制台日志输出可选的异步日志支持日志输出级别可自定义日志格式 

c-log是一个稳定,高效,多线程安全,易用,简单的C/C++ 日志库,在github主页上有丰富的测试case,后续将会推迟直接输出到scribe等集中式日志收集中间件上,帮助用户更好的收集,分析日志 

syslog-ng作为syslog的替代工具,可以完全替代syslog的服务,并且通过定义规则,实现更好的过滤功能  的一个设计原则就是建立更好的消息过滤粒度。syslog-ng能够进行基于内容和优先权/facility的过滤。另一个设计原则是更容易进行不同防火墙网段的信息转发,它支持主机链,即使日志消息经过了许多计算机的转发,也可以找出原发主机地址和整个转发链。最后的一个设计原则就是尽量使配置文件强大和简洁。 

新增一些说明: 

3、log4cplus  默认8字节对齐结构,其他对齐结构会内存泄漏

我要回帖

更多关于 7001端口漏洞 的文章

 

随机推荐