C/C++
文章平均质量分 55
_Mr_COOL
这个作者很懒,什么都没留下…
展开
-
Java Servlet与Applet、CGI、JSP的比较
从网络的早期阶段开始,人们就希望他们的网络服务器不仅能够显示静态文档,通用网关接口(CGI) 扩展了服务器的能力,但其代价是增加了额外的处理进程。FastCGI则把外部CGI 处理进程同网络服务器更紧密地集成在一起,另外,对于专有的,诸如NSAPI 和ISAPI 这样的服务器API,它们直接把外部进程以服务器插件的形式集成到服务器中。现在有了Java servlets,它们的功能强大,可以转载 2015-10-19 15:06:22 · 1623 阅读 · 0 评论 -
GCC 编译详解 (转)
GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。Gcc不仅功能强大,而且可以编译如C、C++、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言,而且Gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。转载 2016-01-21 20:09:52 · 956 阅读 · 0 评论 -
总结configure,pkg-config和PKG_CONFIG_PATH
我想大家都在linux下用源码安装过软件,源码安装软件的第一步是啥?下载源码,没错,小王,你太有才了.. 其实真正的第一步是./configure.似曾相识哦。没错,那么我也时常见过pkg-config及pkg_config_path.这几这到底啥关系呢,这就是今天的主题。 1.什么是configure configure会根据传入的配置项目检查程序编译时所依赖的环境以及对程序编译安装进行配置转载 2016-01-21 20:30:32 · 351 阅读 · 0 评论 -
./configure,make,make install的作用
这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。 make是用来编译的,它从Makefile中读取指令,然后编译。 make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。AUTOMAKE和转载 2016-01-22 10:47:00 · 296 阅读 · 0 评论 -
程序员应该知道的关于Windows API、CRT和STL二三事
1.本文编写目的 本文是为了帮助一些人弄清一些关于Windows API, C运行时程序库(CRT), 和标准C++库(STL)的基本概念。有很多人甚至是有经验的程序员在这些概念上是含糊不清的甚至是有错误观点。如果你想知道他们是在什么基础上实现的并且一直没时间弄清楚这些概念,请花费点时间阅读下本文。 2. 基本概念 下面这幅图代表了WinAPI、CRT和STL三者之间的关系。转载 2016-01-22 16:12:42 · 481 阅读 · 0 评论 -
关于Debug和Release之本质区别的讨论
经常在 CSDN 上看见有人问 Debug 运行正常但 Release 失败的问题。以往的讨论往往是 经验性的,并没有指出会这样的真正原因是什么,要想找出真正的原因通常要凭运气。最 近我看了一些这方面的书,又参考了 CSDN 上的一些帖子,然后深入研究了一下关于二者的不同。以下是我的一些体会,拿来与大家共享。本文主要包含如下内容: 1. Debug 和 Release 编译方式的本质区别 2转载 2016-01-22 16:36:05 · 464 阅读 · 0 评论 -
C++new delete 实现原理
new和delete最终调用malloc和free,关于malloc和free实现原理参见这篇文章:http://blog.csdn.net/passion_wu128/article/details/38964045 new new操作针对数据类型的处理,分为两种情况: 1,简单数据类型(包括基本数据类型和不需要构造函数的类型) 代码实例: [cpp] view plain copy 在转载 2016-08-22 11:25:39 · 1336 阅读 · 0 评论 -
C++ 模板 特化 与 偏特化
c++ 模板作为一个泛化手段,与之相对,对于某种特殊场合,可能要对模板进行相应的特化,偏特化处理。模板为什么要特化,因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的。模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。转载 2016-08-23 11:46:38 · 303 阅读 · 0 评论 -
注册表里的秘密
注册表里的秘密 对于一般用户来说,系统注册表是深奥莫测的,隐藏着巨大的秘密。同时注册表本身却十分脆弱,稍不小心就会引起Windows操作系统的出错甚至瘫痪。但如果你有一定的注册表常识,则可以通过修改注册表让Windows更好地为你服务。注册表事实上就是一个集中管理系统硬件设施、软件配置等信息的数据库,其中存放着各种参数,直接控制着Windows的启动、硬件驱动程序的装载以及一些Windows应用程转载 2016-08-24 18:09:31 · 3405 阅读 · 1 评论 -
流和文件描述符的关系
任何一种操作系统中,程序在开始读写一个文件的内容之前,必须首先在程序与文件之间建立连接或通信通道,这一过程称为打开文件。打开一个文件的目的可以是为了读或者为了写,也可以是即读又写。 UNIX系统中有两种机制用于描述程序与文件的这种连接: (1)文件描述符 (2)流文件描述符 和 流:相同点:1. 都是用来表示用户程序与被操作的文件之间的连接转载 2015-12-01 17:59:07 · 542 阅读 · 0 评论 -
自旋锁(spin lock)与互斥量的区别
自旋锁(spin lock)与互斥量(mutex)的比较自旋锁是一种非阻塞锁,也就是说,如果某线程需要获取自旋锁,但该锁已经被其他线程占用时,该线程不会被挂起,而是在不断的消耗CPU的时间,不停的试图获取自旋锁。互斥量是阻塞锁,当某线程无法获取互斥量时,该线程会被直接挂起,该线程不再消耗CPU时间,当其他线程释放互斥量后,操作系统会激活那个被挂起的线程,让其投入运行。两种锁适用转载 2015-10-13 11:39:18 · 6325 阅读 · 0 评论 -
C函数指针妙用,用c语言写一个简易类
其实在C++中的对象也并不是实现起来也并不是多麽的什么神秘,只是编译器帮我们做了许多工作,所以我们总觉得C++要比c语言难一些,C++编译器其实对于类中的非Virtual 函数的的调用规则与对C编译器对函数的调用时一样的,那就是通过call 函数地址的方法。等有时间详细的写出来,今天先写虚函数的实现原理:#include "stdafx.h"#include<stdio.h>struct Per原创 2015-09-24 10:46:42 · 781 阅读 · 1 评论 -
C++封装一个简单的线程类
多线程编程简介: 大家在编程时,经常需要在程序中启动一个或多个线程来处理任务,而如果每次都是去调用系统创建线程的API函数来创建,代码量虽不多,但线程的创建和业务逻辑代码就揉在一起了,且创建多个线程的时候,有大量的重复代码,不便于维护。若我们把创建线程和销毁线程的这些共同的代码封装到一个类中,这样我们可以更专注业务逻辑的实现,在其它地方直接拿来用就行,程序也便于维护和扩展。而且这样的转载 2015-10-19 15:47:19 · 847 阅读 · 0 评论 -
Linux 内核空间与用户空间
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。段页式机制如下转载 2015-10-20 17:40:32 · 552 阅读 · 0 评论 -
linux虚拟地址空间你真的理解了吗?
学了很久linux内核了,但对于linux内核对于内存管理这块始终有许多疑问,学而不思则罔!看了许多书籍和博客但还是没有搞得很明白。今天仔细思考了为什么需要虚拟内存的问题,突然觉得很有收获,所以记下来和大家分享,也是为了给自己留下更深刻的印象!1.理解进程使用的全部资源是’虚拟‘的,我们知道我们编写的应用程序最终要以进程的形式来运行,因而进程就相当于一个虚拟机(虚拟的计算机),所以我们很容易感原创 2015-10-20 17:19:41 · 7077 阅读 · 0 评论 -
Linux 内存分区管理
inux内核中和内存相关的2个系统参数的设置:想要通过修改linux内存管理相关的参数设置来观察其对内存数据库的读写性能的影响,首先要了解一些linux内存管理相关的重要参数,先了解两个,如下。介绍一些前提基础:在非一致性内存访问(NUMA)情况下,CPU访问不同位置的内存,代价是不一样的。在多CPU情况下,对每个CPU来说都有本地内存和远端内存之分,访问本地内转载 2015-10-20 11:18:50 · 1957 阅读 · 0 评论 -
异步、同步与阻塞、非阻塞的区别
以前对异步和同步总是理解不好,最近看了一些文章,总算把他们的关系弄明白了。 阻塞、非阻塞是描述在同一个进程执下行一个函数调用的,异步和同步是描述两个功能模块的关系的、 阻塞当我们是执行某个系统调用时,当我们是执行某个系统调用时,进程被挂起。 非阻塞当我们是执行某个系统调用时,当我们是执行某个系统调用时,进程并不被挂起,他会执行另一个操作。 具体示例以后再举出来吧,今天很忙!!!原创 2015-10-08 15:34:36 · 368 阅读 · 0 评论 -
目标文件中变量的位置以及默认值
简要阐述源代码中的变量去哪了?原创 2015-08-16 00:11:22 · 641 阅读 · 0 评论 -
c/c++ 中结构体的初始化与类的初始化的不同之处
在C++ 中类的初始化会调用构造函数,根据构造函数来初始化类的变量。如果某个变量没有初始化,则该变量的值是一个随机值。结构体的初始化,是根据所给值来初始化的,如果结构中某个变量的没有赋值,那么该变量被赋值为0.简单的例子:Demo1:#include<iostream>using namespace std;struct T{ int a,b; char szName[20];};in原创 2015-09-18 15:21:50 · 2824 阅读 · 0 评论 -
wait_event_interruptible()与wake_up()的使用
wake_up() wait_event_interruptible()转载 2015-10-13 11:17:07 · 579 阅读 · 0 评论 -
accpet 返回的描述符理解
socket accept()返回的socket描述符的端口和listen描述符端口是一样的吗?as you know,一个socket是由一个五元组来唯一标示的,即(协议,server_ip, server_port, client_ip, client_port)。只要该五元组中任何一个值不同,则其代表的socket就不同。这里忽略协议的区别,在同一协议的基础上,服务器端的listen sock转载 2017-05-04 10:42:57 · 803 阅读 · 0 评论