<![CDATA[Snooda]]> http://www.ltylc2014.com/index zh-cn http://www.ltylc2014.com/read/337 <![CDATA[libcurl和openssl的冲H和资源释放问题-curl_global_cleanup]]> snooda <admin@snooda.com> Thu, 25 Sep 2014 16:59:38 +0000 http://www.ltylc2014.com/read/337
    排查了各U内存泄霌Ӏ不可见字符的可能性后。突然想h是不是libcurl静态链接了openssl跟主E序动态链接的打架。查看后发现libcurl未静态链接openssl?br/>
     不过q也是一个启C。想h既然curl也用CopensslQ那么它在最后cleanup的时候会不会把全局的openssl数据l构l释放掉?br/>

     试了一下,果然好了。原来我在一个函数里开头调用curl_global_initQ结调用curl_global_cleanup。这L话在E序l束时就会释放openssl的全局数据l构。导致后l调用证书校验报错?br/>
     不过openssl也不够友好,报证书签名错误,让h很难联想到是初始化问题?br/>

      不过aes加密部分q不受这个媄响?br/>Tags - ]]>
http://www.ltylc2014.com/read/302 <![CDATA[malloc、calloc、memset与free{内存操作的速度]]> snooda <admin@snooda.com> Tue, 29 May 2012 16:55:28 +0000 http://www.ltylc2014.com/read/302
    写了个程序,分配一个指针数l,挨个分配内存Q然后挨个释放。用的是一??6g内存的虚拟机。gcc版本3.4.2

    先是分配?w?00字节块,发现5ms以内卛_完成?br/>    然后扩大?00字节块,速度没什么变化?br/>
    然后分配100w个字节块Q^均需?70ms左右?br/>    字节块扩大的2k左右Q大?s完成?br/>    扩大?k左右Q大?2s左右?br/>    以上数据均ؓmalloc+memset数据和calloc数据Q两者不怸下?br/>
    只malloc不memsetQ大概能~短20%左右Q可见memset寚w度q是有一定媄响的Q不q对于性能要求不是那么严苛的程序,讄一下提高程序稳定性也是值得的。避免某变量忘记初始化出现野值的问题?br/>



Tags - ]]>
http://www.ltylc2014.com/read/294 <![CDATA[printfI指针NULL的问题]]> snooda <admin@snooda.com> Wed, 16 May 2012 09:52:37 +0000 http://www.ltylc2014.com/read/294
    可见不同的c库对于这个行为的实现不太一致?br/>
    使用中还是要量避免q种用法Q不q每ơ打日志前都要判断指针情늡实比较恶?br/>



]]>
http://www.ltylc2014.com/read/275 <![CDATA[lua_tolstringD调用lua_next时的lua PANIC问题]]> snooda <admin@snooda.com> Sat, 28 Apr 2012 09:49:01 +0000 http://www.ltylc2014.com/read/275
    扑ֈ文档看了下,原来lua_tolstring只支持number和stringcdQ但是对于numbercdQ在取值后也会转换其在表中的实际内容ؓstringQ而我遍历的表是用默认自增烦引作为key的,q样对key调用q个函数会导致key变成字符Ԍ因而遍历有问题?br/>
    如果表的key不一定是stringQ而又要用lua_tolstring获取它的|那么先在栈上复制一份,然后对于复制的D行获取?br/>





Tags - ]]>
http://www.ltylc2014.com/read/260 <![CDATA[cE序中变量在循环内部q是外部声明的问题]]> snooda <admin@snooda.com> Mon, 09 Apr 2012 07:40:27 +0000 http://www.ltylc2014.com/read/260
    今天发现一个模块把变量声明都放到while里面了,看了下代码没有发现必d明在里面的原因,于是开始怀疑是不是声明在内外是差不多的?br/>
    于是试了一下:
引用

int main() {
    int i = 0;

    for(;i < 10000000; i++) {
        int b;
        b++;
    }

    return 1;
}


使用gcc ~译Q把int b攑֜循环内外试了试,用time ./a.out查看执行旉Q发现用时基本相同?br/>d-O2优化选项Q执行时间均~减C前的1/3Q内外两U方式时间依然相同?br/>定义了一个struct实验了下Q结果相?br/>也就是说栈上元素的操作不必纠l于变量声明于何处?br/>
试了下堆上元素操作Q在预料之内Q时间差距巨大,因ؓ重复分配释放内存?br/>
所以对于栈上元素,声明攑֜循环里和循环外是一L。堆上元素不同,需注意?br/>
另,仍然需要注意一些计操作需要放在@环外Q比如求大小之类的,避免循环的每个周期重复计?br/>

原因猜测Q?Q?cpuҎ操作有优化,速度非常快?br/>2Q编译器的基本优化中会优化(gcc没有使用-O参数时仍会优化)
具体原因待深I? ]]>
http://www.ltylc2014.com/read/259 <![CDATA[静态库和动态库~译链接时的依赖查]]> snooda <admin@snooda.com> Thu, 05 Apr 2012 11:48:04 +0000 http://www.ltylc2014.com/read/259     首先用静态库~译出的可执行文件是不考虑库依赖的Q但q不代表用静态库时也不需要考虑。静态库在编译时是不查函数是否被实现的,也就是说只需?h卛_?br/>    其次Q静态库和动态库其实区别很大Q静态库只是~译?o的一个打包的文gQ而动态库d了链接信息?br/>
    q样的话静态库q有一个特性,是在静态库中可以调用一些预留接口,而把q些接口留待以后实现?br/>Tags - ]]>
http://www.ltylc2014.com/read/243 <![CDATA[由strcm参数为NULL看编译器优化]]> snooda <admin@snooda.com> Tue, 14 Feb 2012 10:29:49 +0000 http://www.ltylc2014.com/read/243
引用
#include
int main()
{
strcmp(NULL, "?;
return 1;
}

试的时候发现程序跑的毫无问题?br/>~译参数是gcc -g -O0Q没有开M优化?br/>
gdbq去后发现strcmpҎ没有被执行,Ҏint a = strcmp(NULL, "");后,出core了?br/>
看来~译器默认还是提供一定优化的?br/>
另外需要注意strcmp不会查参敎ͼ效率考虑Q,所以需要自己检查?br/>Tags - ,
, ]]>
ɫav˵-seeɫԭɫԭվ-ллҪ-ŷƵ <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <֩>| <ı> <ı> <ı> <ı> <ı> <ı>