面试经验

OPPO一面

内存分区

内存5个分区:堆、栈、自由存储区、全局/静态存储区、常量存储区

就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量存储区,里面的变量通常是局部变量、函数参数等
就是那些由new分配的内存块,他们的释放编译器不管,由我们的应用程序控制,一般一个new就对应一个delete,如果程序员没有释放掉,在程序结束后,操作系统会自动回收。
自由存储区就是那些由malloc等分配的内存块,他和堆是十分相似的,不过是用free来释放
全局/静态存储区全局和静态存储区(static)被划分在统一存储区中,在以前的C语言中有初始化和未被初始化之分,但在C++中不再区分
常量存储区这是一块特殊的存储区,他们存放常量,数值不可修改

程序优化的方式

  • 合适算法和数据结构
  • 使用多线程
  • 程序结构优化
  • 内存优化(采用合适的内存分配,const,少用全局多用局部等)

memcpy函数的实现

void *memcpy(void *des,const void *src,size_t len)
{
     if(NULL == des  && src == NULL)
     {
        return NULL;
     }
     void *ret = dst;
     if(dst <= src || (char *)dst >= src+len){
     //没有内存重叠,从低地址开始复制
     while(len--){
          *(char *)dst = *(char*)src;
          dst = (char *)dst +1;
          src = (char*)src+1;
}else {
 //有内存重叠,从高地址开始复制
 src = (char *)src +len -1;
 dst = (char *)dst +len -1;
 while(len--){
        *(char*)dst = *(char*)src;
        dst = (char *)dst -1;
         src = (char*)src-1;
 }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值