2014年4月4日

C语言中volatile关键字的作用[转]

摘要: 一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变量缓存到寄存器;调整指令顺序充分利用CPU指令流水线,常见的是重新排序读写指令。对常规内存进行优化的时候,这些优化是透明的,而且效率很好。由编译器优化或者硬件重新排序引起的问题的解决办法是在从硬件(或 阅读全文

posted @ 2014-04-04 13:55 袁军峰 阅读(261) 评论(0) 推荐(0) 编辑

2014年3月27日

数据对齐 posix_memalign 函数详解

摘要: 对齐数 据的对齐(alignment)是指数据的地址和由硬件条件决定的内存块大小之间的关系。一个变量的地址是它大小的倍数的时候,这就叫做自然对齐 (naturally aligned)。例如,对于一个32bit的变量,如果它的地址是4的倍数,-- 就是说,如果地址的低两位是0,那么这就是自然对齐了。所以,如果一个类型的大小是2n个字节,那么它的地址中,至少低n位是0。对齐的规则是由硬件引起 的。一些体系的计算机在数据对齐这方面有着很严格的要求。在一些系统上,一个不对齐的数据的载入可能会引起进程的陷入。在另外一些系统,对不对齐的数据的 访问是安全的,但却会引起性能的下降。在编写可移植的代码的时候 阅读全文

posted @ 2014-03-27 14:47 袁军峰 阅读(4698) 评论(0) 推荐(2) 编辑

2014年3月26日

android ndk中使用gprof

摘要: 1、下载gprof支持库下载地址:http://code.google.com/p/android-ndk-profiler/2、代码上的修改添加 在初始化时:monstartup("yourlib.so"); 在退出时添加:setenv("CPUPROFILE", "/sdcard/gmon.out", 1);moncleanup();3、makefile文件修改:由于-pg 和 -fomit-frame-pointer -ffunction-sections不能兼容,所以后两个编译参数不能用。PIG = -pginclude=$( 阅读全文

posted @ 2014-03-26 14:36 袁军峰 阅读(794) 评论(0) 推荐(0) 编辑

2014年3月24日

宽字符与窄字符

摘要: 什么是宽字符与窄字符(1) 一个ANSI字符占一个字节共8位,一个UNICODE字符占两个字节共16位;ANSI字符串以’\0’结束,0x00。#Q:UNICODE字符串以什么结束??#A:UNICODE字符串以L”\0”结束,0x0000。(2)UNICODE和ANSI字符的相关定义及应用在各种运行库中的体现如下:1) 在C标准库中i. UNICODE在C标准库下编译的宏定义为_UNICODEii. 宽字符的数据类型为wchar_t,窄字符的数据类型为char。数据类型的定义在头文件string.h中,对wchar_t的定义为:{{{typedefunsignedshortwchar_t;} 阅读全文

posted @ 2014-03-24 22:14 袁军峰 阅读(6067) 评论(0) 推荐(0) 编辑

UTF8与ANSI互转

摘要: 在取回的结果中,如果有Unicode字符,用printf来打印的话,则会出现乱码。通过这个方法,可以判断是否为unicode字符,是的话,通过wprintf来打印。1、判断字符串是否为Unicode的方法不用判断,在xmlhttp.send中发送的代码都经过utf8编码2、将UTF8转化为ANSI编码的方法,UTF8中一个中文字有三个字节去表示,而ANSI中一个中文字是二个字节表示。BOOL Utf8ToAnsi(LPCSTR lpcszStr, char* lpwszStr, DWORD dwSize){ DWORD dwMinSize; WCHAR* strTmp ; dwMinSize 阅读全文

posted @ 2014-03-24 19:07 袁军峰 阅读(9366) 评论(0) 推荐(0) 编辑

2014年3月23日

C#中的字符串及其编码转换

摘要: 关于字符编码以及如何在程序中处理unicode,本想写篇文章总结学习一下,但发现有前人已经论述的很完善了,不再重复,可以参考:http://www.regexlab.com/zh/encoding.htm。 在C++中,字符有char和wchar之分,相应的,字符串有string和wstring两种。 C#中,string是一个unicode字符串,相应的,每个char都是16位。 源文件中出现的字符串常量,都会被自动转换为unicode编码(utf16),利用Text.Encoding,可以实现不同编码间的转换。using System; using System.Text; na... 阅读全文

posted @ 2014-03-23 21:19 袁军峰 阅读(2624) 评论(0) 推荐(0) 编辑

2014年3月20日

小米手机开发遇到的问题

摘要: 今天开始小接触一下andoid开发,拿了一个小米测试机,遇到两个问题:1)小米手机不识别 adb devieces : 没显示 解决:从网上招到一个叫51-andoid.rules的文件,拷贝到/etc/udev/rules.d/ 下,重启一个shell终端即可解决问题。2)电脑上的文件拷贝不到手机上 err:failed to copy '/home/usa/svn/aispeech/speechplatform/branches/temp/wvite/b.out' to '/sdcard/b.out': Operation not permitted 解决: 阅读全文

posted @ 2014-03-20 17:02 袁军峰 阅读(444) 评论(0) 推荐(0) 编辑

2014年3月19日

Linux进程的实际用户ID和有效用户ID

摘要: 本人对Unix下的进程的实际用户ID和有效用户ID一直都比较迷惑,没有完全搞清楚。最近温习APUE(《高级UNIX环境编程》),终于对这两个概念有了一个清晰的认识,看来经典著作绝对需要温习多遍,才能领略其中的奥秘。 在Unix进程中涉及多个用户ID和用户组ID,包括如下:1、实际用户ID和实际用户组ID:标识我是谁(据说这是一个变态的哲学问题,难死一片哲学家)。也就是登录用户的uid和gid,比如我的Linux以simon登录,在Linux运行的所有的命令的实际用户ID都是simon的uid,实际用户组ID都是simon的gid(可以用id命令查看)。2、有效用户ID和有效用户组ID:进程用来 阅读全文

posted @ 2014-03-19 19:10 袁军峰 阅读(422) 评论(0) 推荐(0) 编辑

2014年3月18日

Linux core 文件介绍

摘要: 1. core文件的简单介绍在一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。2. 开启或关闭core文件的生成用以下命令来阻止系统生成core文件:ulimit -c 0下面的命令可以检查生成core文件的选项是否打开:ulimit -a该命令将显示所有的用户定制,其中选项-a代表“all”。也可以修改系统文件来调整core选项在/etc/profile通常会有这样一句话来禁止产生core文件,通常这种设置是合理的:# No core files by defaultulimit -S -c 0 > /de 阅读全文

posted @ 2014-03-18 20:32 袁军峰 阅读(202) 评论(0) 推荐(0) 编辑

Linux下内存的几个基本概念

摘要: 先介绍几个基本概念:SIZE: 进程使用的地址空间, 如果进程映射了100M的内存, 进程的地址空间将报告为100M内存. 事实上, 这个大小不是一个程序实际使用的内存数.RSS: "Resident Set Size", 实际驻留"在内存中"的内存数. 不包括已经交换出去的代码. 举一个例子: 如果你有一个程序使用了100K内存, 操作系统交换出40K内存, 那么RSS为60K. RSS还包括了与其它进程共享的内存区域. 这些区域通常用于libc库等.SHARE: RSS中与其它进程共享的内存部分大小.VMSIZE: 一个进程占用的总的地址空间大小. 阅读全文

posted @ 2014-03-18 20:05 袁军峰 阅读(358) 评论(0) 推荐(0) 编辑

导航