存档

‘c/c++’ 分类的存档

linux c 堆变量,栈变量,指针参数,非指针参数剖析

2015年12月7日 806 人阅读 没有评论

1、概念

2.1 堆:程序可以动态申请的存储空间,通过malloc系列函数分配,全局可访问。

2.2 栈:程序在进行函数调用时动态伸缩的存储空间,局限于函数内可以访问。

2.3 堆变量:数据存储在堆的变量,全局可访问。

2.4 栈变量:函数中声明的局部变量,只能在函数内部访问,否则访问行为的结果是未定义的。

阅读全文…

分类: c/c++, 面试 标签:

c/c++中的“大小,长度”问题

2015年12月6日 547 人阅读 没有评论

1、显式缓冲区的sizeof和strlen

char buf[10] = “hello”;

size_t a = sizeof(buf);

size_t b = strlen(buf);

a的值为10,b的值为5,这是因为sizeof(buf)计算的是字符数组的大小,strlen(buf)计算的是“hello”的长度。
2、隐式缓冲区的sizeof和strlen

阅读全文…

分类: c/c++, 随想, 面试 标签:

memmove函数真的没有问题了?

2015年11月18日 729 人阅读 没有评论

1、思考

首先思考一个问题:“不是已经有了memcpy了码?为什么还要提供memmove?”

2、解惑

通过man手册我们可以发现memcpy和memmove的原型都是void * (void *dest, const void *src, size_t n);那么它们有什么区别,通过查看memcpy和memmove的源码我们发现memcpy是从低地址往高地址逐字节的拷贝,而memmove则会比较一下dest和src地址的大小,当src地址大于dest时memmove的行为和memcpy的行为是一致的,当dest地址大于src时,memmove则是从高地址往低地址逐字节的拷贝,从而避免了当dest地址大于src地址且拷贝区域存在交叉的情况下,dest最后几个字节的值有误的情况。

阅读全文…

分类: c/c++, linux, 面试 标签: ,

linux c函数中打印当前函数调用栈

2015年10月16日 741 人阅读 没有评论
1、概述

    在execinfo.h的头文件中提供了backtrace,和backtrace_symbols两个c函数接口用于打印程序当前的调用栈。backtrace用于获取调用栈,backtrace_symbols用于把调用栈转换成函数名和地址的字符串。

阅读全文…

分类: c/c++, linux 标签:

c++new的语义

2015年8月16日 492 人阅读 没有评论

在使用c++过程中我们经常使用new来创建一个对象,比如:Test * p = new Test,实际上c++中有三个new,它们分别为:new operator,operator new,placement new我们平时调用的new是c++语言内置的new operator,不能被重载。
阅读全文…

分类: c/c++ 标签: