
C/C++学习笔记
古宇hhh
学习中!!!!
展开
-
C++ 多线程编程
线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。基于进程的多任务处理是程序的并发执行。 基于线程的多任务处理是同一程序的片段的并发执行。pthread_t 定义线程变量。pthread_create(thread, attr, start_routine, arg);创建新的线程,并让其执行,参...原创 2018-10-24 21:34:44 · 1041 阅读 · 0 评论 -
TCP粘包问题
1、什么是粘包: 简单的说就是通过TCP协议发送了多条独立的数据,但接收的时候,有些数据不幸的合并成了一个。比如客户端向服务器发送两个命令: 1)Hello 2)world 但是服务器接收的时候,很可能不是分两次接收,而是一次接收到 Helloworld2、粘包出现原因: 由于TCP协议本身的机制(面向连接的可靠地协议-三次握手机制)客...原创 2019-03-24 22:02:28 · 109 阅读 · 0 评论 -
Socket入门详解
一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有s...转载 2019-03-24 22:00:00 · 1076 阅读 · 0 评论 -
new 与malloc申请内存区别
首先我们需要了解堆与栈的概念。区分堆内存与栈内存的区别。以及堆与栈访问速度的差异的原因。 1.属性:new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。2.参数:使用new 操作副申请内存分配时无须制定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。3.返回类型:new操作...原创 2018-11-05 22:02:42 · 1298 阅读 · 0 评论 -
C++内存分类
内存分为5个区:栈,堆,自由存储区,全局/静态存储区,常量存储区。 栈区:内存由编译器再需要时自动分配和释放。通常用来存储局部变量和函数参数。(为运行函数而分配的局部变量,函数参数树,返回地址等存放在栈区)。栈运行分配内置于处理器的指令之中,效率高,但是分配的内存容量有限。 堆区:内存由new分配的内存块,他们的释放搬移其不管,有我们的应用程序区控制,一般一个new就要对应一个de...原创 2018-11-05 21:24:55 · 2017 阅读 · 2 评论 -
堆(heap)内存与栈(stack)内存的区别
数据结构中描述堆栈:堆(heap):是一种非连续的树形存储数据结构,每个节点存在一个值,整个树是经过排序的,特点是根节点最小(小顶堆)或根节点最大(大顶堆),且根节点的两个子树也是一个堆。常用来实现优先队列,存取随意。栈(stack):是一种连续存储的数据结构,具有先进后出的性质。通常的操作有入栈(压栈),出栈和栈顶元素。想要读取某个元素就要将之前的元素全部出栈,才能完成。内存中的栈区...原创 2018-11-05 15:56:50 · 1620 阅读 · 0 评论 -
堆排序 - 优先队列(实现)
优先队列:优先队列的实现是大顶堆(优先级最高的元素再前面),对于节点数量为n的大顶堆,插入元素与弹出元素的时间复杂读为O(log(n)),询问的时间复杂度为O(1)。首先我们需要将数组映射到完全二叉树上。对于数组[16, 7, 3, 20, 17, 8]映射为:从后到前调整非叶子节点与子节点的位置:对于大小为n的二叉树,需要调整的第一个节点为n/2号节点。为了方便理解我...原创 2018-11-04 21:37:35 · 278 阅读 · 0 评论 -
智能指针原理(整理)
智能指针智能指针主要包含:shared_ptr,unique_ptr,weak_ptr。三种模板类,头文件为<memory>,c++11之后版本使用。智能指针的作用有:C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。...原创 2018-11-02 21:57:16 · 791 阅读 · 0 评论 -
空悬指针&&野指针
空悬指针(dangling pointer)指向已经销毁的对象或已经回收的地址,以下情况可能出现空悬指针:#include <iostream>int main(){ char *d = NULL; { char c = 'c'; d = &c; } //变量c释放,d变为空悬指针}#incl...原创 2018-11-02 20:53:16 · 187 阅读 · 0 评论 -
c语言 malloc 函数用法
函数声明:Tips: void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。malloc 函数申请空间需要使用free释放。void* malloc(int size) malloc向系统申请size字节的内存空间,返回值类型为void *。使用说明:int *p;p = (int *)malloc( sizeof(in...原创 2018-11-02 20:40:14 · 5130 阅读 · 0 评论 -
智能指针实现C++
#include <iostream>using namespace std;template <typename T>class Shared_ptr{private: T* _ptr; size_t *_count;//unsigned int *_count;public: Shared_ptr(T* ptr = nullptr)...原创 2018-11-03 20:49:13 · 296 阅读 · 0 评论 -
2019 字节跳动 秋招面试
一面:1.TCP与UDP的区别,及应用场景2.基于UDP实现可靠性传输3.进程调度算法4.static的作用5.输入url后发生了什么6.简述什么是http协议7.cookie中包含什么信息————————————————————————————————————————1.定义返回最大值的宏(注意()因为参数可能是表达式)2.给定有序数组,在某个节点进行翻转...原创 2019-07-23 15:48:51 · 488 阅读 · 0 评论