自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

转载 Unix下设计动态库的方法《精通Unix下C语言编程与项目实践》(一)

3.3 动态库的生成动态库的生成可分为三个步骤,设计库源码、编译位置无关码(PIC)型.o文件和链接动态库。链接动态库的命令包含特殊标志,与链接静态库和链接可执行目标文件有区别,而且不同的Unix系统,其实现的细节也不尽相同。编译PIC型.o中间文件的方法一般是采用C语言编译器的“-KPIC”或者“-fpic”选项,有的Unix版本C语言编译器缺省带上了PIC标志。创建最终动态库的方法一般

2015-01-30 11:29:55 569

转载 Linux下C编程+GDB调试

Linux的发行版中包含了很多软件开发工具。 它们中的很多是用于 C 和 C++应用程序开发的。 本文介绍了在 Linux 下能用于 C 应用程序开发和调试的工具。 本文的主旨是介绍如何在 Linux 下使用 C 编译器和其他 C 编程工具, 而非 C 语言编程的教程。 在本文中你将学到以下知识:· 什么是 C · GNU C 编译器 · 用 gdb 来调试GCC应用程序 你也

2015-01-28 13:20:30 382

转载 浅谈Unix和Linux下的int

这也算和平同学的点题作文了,呵呵。他对于Linux下很多时候,api函数大量使用int作为常用类型感到不解,问我,我呢,就试着回答一下哈。原帖在这里:http://student.csdn.net/space.php?uid=121080&do=thread&id=9168问题如下:根据建议,表示像“容量”这样的变量时,因为不可能出现负数,所以建议用size_t类型。但是linux

2015-01-28 13:18:56 1279

转载 uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结

在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种数据类型啊!怎么又是u又是_t的?很多人有这样的疑问。论坛上就有人问:以*_t结尾的类型是不是都是long型的?在baidu上查一下,才找到答案,这时才发觉原来自己对C掌握的太少。那么_t的意思到底表示什么?具体的官方答案没有找到,不过我觉

2015-01-26 23:49:04 416

转载 Vmware+gdb调试Linux内核——工欲善其事,必先利其器

今天我终于忍受不了qemu的低速跟不可理喻的各种bug,开始寻找新的调试内核的方法。然后想到了Vmware,那么成熟的虚拟机怎么可能调试不了内核。于是尝试了一番,发现结果非常的棒!所以立马奋笔疾书,把这个方法记录下来。         我们这里主要分成几个步骤:                                                         1、vmware

2015-01-26 23:47:50 2396 1

转载 分析EOF究竟是什么

EOF仅仅是一种状态或者说条件,需要触发。read调用遇到文件结尾,触发该条件,结果将返回0。针对EOF,对于标准输入设备,普通文件,管道文件,网络套接字文件是read如何触发呢?下面程序将说明:server.c 是socket套接字服务端,目的为了网络套接字文件是read如何触发测试用的。###########################server.c#######

2015-01-26 08:58:01 1307

转载 Linux shell中提取文件名和目录名的一些方法

很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等。例如,从路径/dir1/dir2/file.txt中提取也文件名file.txt,提取出目录/dir1/dir2,提取出文件后缀txt等。下面介绍两种常用的方法来进行相关的操作。一、使用${} 1、${var

2015-01-26 08:56:48 3649

转载 现代C++风格的新元素

“C++11就像一门新的语言。” – Bjarne StroustrupC++11标准推出了很多有用的新特性,本文特别关注那些相比C++98更像是一门新语言的特性,理由是:这些特性改变了编写C++程序使用的代码风格和习语【译注 1】,通常也包括你设计C++函数库的方式。例如,你会看到更多参数和返回值类型为智能指针(smart pointer),同时也会看到函数通过值传递返回大型对象

2015-01-25 23:21:06 369

转载 Python -01 入门

最近系统学习Android源代码,发现很多脚本是用python写的。于是,花了一个下午快速学习了python,立马眼前一亮,取代了perl在我心中的位置。选择语言准则:  第一考虑Python  Python不适合干的求助perl   Perl不好干的求助Java  Java不好干的求助C  C不好干的求助汇编有了想法,第一步是选书,问了度娘后,选择

2015-01-25 23:20:39 362

转载 深入理解C语言-09 编译器介绍

比较小型的编译器是TinyCC(http://bellard.org/tcc/)linux下编译非常方便。但gdb使用起来没有Visual Studio方便,特意花了一点时间,整理了一个VC工程。TinyCC里面和i386/PE相关的主要是以下文件:config.h 配置elf.h  ELF格式相关,由于代码写得不是太好,PE也要用,不能删除i386-asm.c

2015-01-25 23:18:07 482

转载 【c语言基础必备】gcc编译器的简单编译

一. 常用编译命令选项假设源程序文件名为test.c。1. 无选项编译链接用法:#gcc test.c作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。2. 选项 -o用法:#gcc test.c -o test作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。3

2015-01-25 23:17:42 286

转载 C/C++/PHP等语言 在线编译器 分类: C++

有时候在网吧或别人的电脑上写了一些c/c++程序,却苦于没有安装编译器,无法编译和调试,非常的不方便。这时候我们可以借助在线编译系统来进行c/c++代码的编译。仅仅是编译的话,acm oj是不太合适的。下面分享下找到一份关于在线编译系统的资料。1、http://codepad.org/推荐星级:★★★★是否需注册:否(注册的话也很快,几秒钟而已)优点:网页界面简洁,

2015-01-25 23:16:59 356

转载 关于《C语言深度解剖》4.1.5编译器的bug小节

编译器的bug?另外一个有意思的现象,在Visual C++ 6.0调试如下代码的时候却又发现一个古怪的问题:int *p = (int *)0x12ff7c;*p = NULL;p = NULL;在执行完第二条代码之后,发现p 的值变为0x00000000 了。按照我么上一节的解释,应该p的值不变,只是p 指向的内存被赋值为0。难道我们讲错了吗?别急,再试

2015-01-25 23:16:12 349

转载 57段让编译器崩溃的C语言代码

导读:本文由犹他州大学的计算机系的 John Regehr 整理。虽然我不清楚到底有多少人喜欢看让编译器崩溃的程序,但这篇文章就是给这些的人(包括我)。我们讨论编译器Bug测试案例的论文就包括很多这种崩溃型的Bug。下文是就是这些 C 语言代码段,由工具逐字输出,代码格式上肯定会有些问题。(代码段后面申明了对应被崩溃的编译器,有读者问为什么没有 MSVC 编译器的,Regehr 回复说他们

2015-01-25 23:15:43 589

转载 C++强大背后

在31年前(1979年),一名刚获得博士学位的研究员,为了开发一个软件项目发明了一门新编程语言,该研究员名为Bjarne Stroustrup,该门语言则命名为——C with classes,四年后改称为C++。C++是一门通用编程语言,支持多种编程范式,包括过程式、面向对象(object-oriented programming, OP)、泛型(generic programming, G

2015-01-25 23:14:09 349

转载 快速掌握一个语言最常用的50%

现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;其二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开始做实际工作。然而这两种方法都有弊病。第二种方法的问题当然很明显,不仅浪费了时间,偏离了目标,而且学习效率不高。因为没有实际问题驱动的语言学习通常是不牢固不深入的。有的人学着学着成了语言专家,反而忘了

2015-01-25 23:12:50 294

转载 C++0X的三件好东西(零)

先说一些废话,可以跳过不看。我主张,在具备基础之后,学习任何新东西,都要抓住主线,突出重点。对于关键理论的学习,要集中精力,速战速决。而旁枝末节和非本质性的知识内容,完全可以留给实践去零敲碎打。原因是这样的,任何一个高级的知识内容,其中都只有一小部分是有思想创新、有重大影响的,而其它很多东西都是琐碎的、非本质的。因此,集中学习时必须把握住真正重要那部分,把其它东西留给实践。对于重点知识,只

2015-01-25 23:12:32 279

转载 使用 C++11 编写 Linux 多线程程序

前言在这个多核时代,如何充分利用每个 CPU 内核是一个绕不开的话题,从需要为成千上万的用户同时提供服务的服务端应用程序,到需要同时打开十几个页面,每个页面都有几十上百个链接的 web 浏览器应用程序,从保持着几 t 甚或几 p 的数据的数据库系统,到手机上的一个有良好用户响应能力的 app,为了充分利用每个 CPU 内核,都会想到是否可以使用多线程技术。这里所说的“充分利用”包含了两个层面的

2015-01-24 11:36:42 484

转载 Linux那些事儿 之 ext4文件系统(0) 引子

曾经以为人生就这样了,浮躁的心拒绝再看代码。然而来到美国两年之后,我于本月初去了一趟拉斯维加斯,发现在那儿找个美国小姐要八百美金,而且还不是包夜。当那个金发美女都已经走进我的房间,我却因为价钱太贵承受不起而决定取消的时候,我觉得我的人生真是太失败了。那晚,看她出去之后,我内心一阵郁闷,于是打开电脑开始看A片,怎奈看到一半电脑竟然说文件系统崩溃了。我心想ext4文件系统不是号称很强大吗,怎么这么容易

2015-01-24 11:35:37 910

转载 C++程序员看过来,false < false的设定恰当吗?

C++中是否规范地定义了:布尔参数中的“小于(less than)运算符”,并且如果有的话,四个参数排列的结果是什么?换句话说,以下操作的结果是有准确定义的吗?1234false false true true 在我的设定下(Centos 7, GCC 4.8.2),下面的代码得出了我期

2015-01-24 11:34:22 840

转载 12个有趣的C语言问答

0. gets() 方法Q:以下代码有个被隐藏住的问题,你能找到它吗?A:这个不显眼的问题就是使用了 gets() 方法。此方法接受一个string类型参数,但是却没有检测此数值是否 有足够的空间来拷贝数据。所以这里我们一般用 fgets() 方法将来的更好。12345678910111213#in

2015-01-24 11:16:23 288

转载 世界上最简单的无锁哈希表

无锁哈希表(Lock-Free Hash Table )可以提高多线程下的性能表现,但是因为实现一个无锁哈希表本身的复杂度不小。(ps:真正的复杂在于出错之后的调试,因为多线程下的调试本身就很复杂,引入无锁数据结构之后,传统的看堆栈信息和打印log都基本上没有意义了。堆栈中的数据可能被并发访问破坏,而打印log本身可能会改变程序执行时对数据访问的时序。一个比较可行的做法是实现一个无锁版本和一个传统

2015-01-24 11:15:21 440

转载 推荐!可视化垃圾回收算法

大部分开发者都认为自动垃圾回收器是理所当然的。实际上,这只是语言运行时提供的一项实用功能,旨在简化我们的开发工作。但是如果尝试着了解垃圾回收器的内部原理,你会发现很难弄明白。除非熟悉它的工作流程和错误处理方式,否则内部成千上万的实现细节会让你不知所措。我编译了一个有五种不同的垃圾回收算法工具。程序运行时会创建一个动画界面。你可以从github.com/kenfox/gc-viz上获取动画和

2015-01-24 11:14:32 291

转载 递归与尾递归(C语言)

在计算机科学领域中,递归式通过递归函数来实现的。程序调用自身的编程技巧称为递归( recursion)。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归

2015-01-24 11:13:53 325

转载 那些年我们一起追过的缓存写法(一)

介绍本篇主要说下楼主平常项目中缓存使用经验和遇到过的问题。 目录一: 基本写法二:缓存雪崩1:全局锁,实例锁 2:字符串锁三:缓存穿透四:再谈缓存雪崩五:总结 一:基本写法为了方便演示,我们用Runtime.Cache做缓存容器,并定义个简单操作类。如下:123456789101

2015-01-24 11:13:13 273

转载 C++11 中值得关注的几大变化(详解)

英文文章来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 (and Why You Should Care),赖勇浩做了一个中文翻译在这里。所以,我就不翻译了,我在这里仅对文中提到的这些变化“追问为什么要引入这些变化”的一个探讨,只有知道为了什么,用在什么地方,我们才能真正学到这个知识。而以此你可以更深入地了解这些变化。所以,本文不

2015-01-24 11:12:17 464

转载 C++11 中的线程、锁和条件变量

线程类std::thread代表一个可执行线程,使用时必须包含头文件。std::thread可以和普通函数,匿名函数和仿函数(一个实现了operator()函数的类)一同使用。另外,它允许向线程函数传递任意数量的参数。1234567891011121314#include  void f

2015-01-24 11:11:26 353

转载 C++语言的15个晦涩特性

这个列表收集了 C++ 语言的一些晦涩(Obscure)特性,是我经年累月研究这门语言的各个方面收集起来的。C++非常庞大,我总是能学到一些新知识。即使你对C++已了如指掌,也希望你能从列表中学到一些东西。下面列举的特性,根据晦涩程度由浅入深进行排序。1. 方括号的真正含义2. 最烦人的解析3.替代运算标记符4. 重定义关键字5. Placement new6.在声明变量的同时进行分支7.

2015-01-24 11:10:14 254

转载 原子操作 vs 非原子操作

在网上已经有很多有关介绍原子操作的内容,通常都是注重于原子读-修改-写(RMW)操作。然而,这些并不是原子操作的全部,还有同样重要的原子加载和原子存储。在这篇文章中,我将要在处理器级别和C/C++语言级别两个方面来对比原子加载和原子存储与它们相应的非原子部分。沿着这条路,我们将弄清楚C++11中“数据竞争”这个概念。共享内存中的原子操作是指它是否完成了一个线程相关的单步操作。当一个原子存储

2015-01-24 11:09:48 1973

转载 C++的另一种错误处理策略

这篇短文是讨论一个大多数程序员都感兴趣的一个话题:错误处理。错误处理是编程的一个“黑暗面”。它既是应用程序的“现实世界”的关键点,也是一个你想隐藏的复杂业务。在早期的C编程生涯中,我知道三种错误处理的方式。C语言的方式:返回错误码C语言风格的错误处理是最简单的,但是并不完美。C语言风格的错误处理依赖于“当程序遇到错误时返回一个错误码”。这里是一个简单的例子:

2015-01-24 11:08:51 863

转载 现代C++风格的新元素

“C++11就像一门新的语言。” – Bjarne StroustrupC++11标准推出了很多有用的新特性,本文特别关注那些相比C++98更像是一门新语言的特性,理由是:这些特性改变了编写C++程序使用的代码风格和习语【译注 1】,通常也包括你设计C++函数库的方式。例如,你会看到更多参数和返回值类型为智能指针(smart pointer),同时也会看到函数通过值传递返回大型对象

2015-01-24 11:08:06 273

转载 57段让编译器崩溃的C语言代码

导读:本文由犹他州大学的计算机系的 John Regehr 整理。虽然我不清楚到底有多少人喜欢看让编译器崩溃的程序,但这篇文章就是给这些的人(包括我)。我们讨论编译器Bug测试案例的论文就包括很多这种崩溃型的Bug。下文是就是这些 C 语言代码段,由工具逐字输出,代码格式上肯定会有些问题。(代码段后面申明了对应被崩溃的编译器,有读者问为什么没有 MSVC 编译器的,Regehr 回复说他们

2015-01-24 11:07:19 398

转载 开发者应该开始学习C++吗?

随着C++ 11和C++ CX的引入,很多人重新燃起了对这门语言的兴趣。不少开发者,尤其是Windows开发者,都想知道是否应该放弃C#和Java,转而支持C++。John Sonmez认为这并不需要。在“为什么C++并没有‘王者归来’(Why C++ Is Not ‘Back’)”一文中,John Sonmez认为只有如下三个原因才会使用C++:● 需要榨干软件每一寸可能的性能,并且

2015-01-24 11:06:59 257

转载 能让你成为更优秀程序员的10个C语言资源

一些人觉得编程无聊,一些人觉得它很好玩。但每个程序员都必须紧跟编程语言的潮流。大多数程序员都是从C开始学习编程的,因为C是用来写操作系统、应用程序最常用的语言。C编程笔记这些是华盛顿实验学院C编程入门课的部分笔记。它们是以《c程序设计语言》的补充笔记(从1995年春开始)为基础修改的,而这本书的作者就是大名鼎鼎的Brian Kernighan和Dennis Ritchie了,人们亲昵地

2015-01-24 11:05:25 351

转载 失落的C语言结构体封装艺术

目录1. 谁该阅读这篇文章2. 我为什么写这篇文章3.对齐要求4.填充5.结构体对齐及填充6.结构体重排序7.难以处理的标量的情况8.可读性和缓存局部性9.其他封装的技术10.工具11.证明及例外12.版本履历 1. 谁该阅读这篇文章本文是关于削减C语言程序内存占用空间的一项技术——为了减小内存大小而手工重新封装C结构体声明。你需要C语言

2015-01-24 11:04:14 363

转载 我推荐的一些C\C++书籍

人们常常问我有什么C++和编程的书籍推荐,也许是因为我在PowerDNS有一个关于“编写可读性良好的C++代码”的演讲。这篇博文可以作为我对上述问题的一个回答,同时也包含了一些更广泛的笔记编程。如果你有任何补充或喜欢的书籍但是我没有提到,请给留言提示,我打算一有新书就更新这个页面。第一个注意项:如果你打算学习C++,请务必学习最新版的C++ 2011。这个版本的C++移除了许多由C++强大带来

2015-01-24 11:02:39 268

转载 15款C/C++程序员必备的编译器和IDE

当前,Web开发人员编程语言的选择很多,比如Java、.Net、PHP、Ruby、Perl、Python等等。今天,本文想和大家讨论下两种古老而又广泛流行的编程语言:C和C++。C/C++自身有许多优良的特性,代码运行高效,并有一些外围工具的支持。如今,这两种语言以其庞大的函数库和健全的安全机制,仍然活跃在编程语言领域。本文将整理一些让人印象深刻的C/C++集成开发环境(IDE)和编译器。ID

2015-01-24 11:01:50 1013

转载 Google C++ 编码规范(中文版)

C++ 是 Google 大部分开源项目的主要编程语言。正如每个 C++ 程序员都知道的,C++ 有很多强大的特性,但这种强大不可避免的导致它走向复杂,使代码更容易产生 bug,难以阅读和维护。Google 经常会发布一些开源项目,意味着会接受来自其他代码贡献者的代码。但是如果代码贡献者的编程风格与 Google 的不一致,会给代码阅读者和其他代码提交这造成不小的困扰。Google 因此发布了

2015-01-24 11:01:12 555

转载 C++的历史

C++的历史可以追溯到1979年,当时Bjarne Stroustrup(译者注:C++之父)正在准备他的博士毕业论文,他有机会使用一种叫做Simula 的语言。顾名思义,Simula语言的主要作用是仿真。Simula 67是Simula语言的一种变种,被公认是首款支持面向对象的语言。Stroustrup发现面向对象的思想对于软件开发非常有用,但是因Simula语言执行效率低,其实用性不强。不

2015-01-24 11:00:09 302

转载 C\C++代码优化的27个建议

1. 记住阿姆达尔定律:funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数。所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。2. 代

2015-01-24 11:00:08 323

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除