博客园 - kkshaq
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=70524
2019-07-25T09:34:28Z
kkshaq
https://www.cnblogs.com/kkshaq/
feed.cnblogs.com
https://www.cnblogs.com/kkshaq/p/11245721.html
c++11 standardized memory model 内存模型 - kkshaq
C++11 标准中引入了内存模型,其目的是为了解决多线程中可见性和顺序(order)。这是c++11最重要的新特征,标准忽略了平台的差异,从语义层面规定了6种内存模型来实现跨平台代码的兼容性。多线程代码因为其本身的复杂性问题,有引入死锁和race condition等一系列问题,可能造成的后果有cr
2019-07-25T09:34:00Z
2019-07-25T09:34:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】C++11 标准中引入了内存模型,其目的是为了解决多线程中可见性和顺序(order)。这是c++11最重要的新特征,标准忽略了平台的差异,从语义层面规定了6种内存模型来实现跨平台代码的兼容性。多线程代码因为其本身的复杂性问题,有引入死锁和race condition等一系列问题,可能造成的后果有cr <a href="https://www.cnblogs.com/kkshaq/p/11245721.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/11212961.html
C++和C API调用 - kkshaq
c++是C的超集,不可避免的要兼容C的特性,C++在C基础山的拓展部分叫做C with class,同时C++有自己特有的属性比如模板template. C并不完全是C++的子集. 那么如何在C/C++中设计接口,实现相互调用呢?我们经常在C++代码中看见extern C的语句,那么其目的是什么呢?
2019-07-19T06:09:00Z
2019-07-19T06:09:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】c++是C的超集,不可避免的要兼容C的特性,C++在C基础山的拓展部分叫做C with class,同时C++有自己特有的属性比如模板template. C并不完全是C++的子集. 那么如何在C/C++中设计接口,实现相互调用呢?我们经常在C++代码中看见extern C的语句,那么其目的是什么呢? <a href="https://www.cnblogs.com/kkshaq/p/11212961.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/10839598.html
c+11 std::condition_variable and mutex - kkshaq
multiple threads synchronization primitive: 多线程同步语义 多线程的同步语义是多线程编程的核心,线程之间通过同步语义进行通信,实现并发。C++ JAVA 中线程同步的基本原语是condition variable 和mutex构成的管程 ,OS操作系统课程
2019-05-09T09:06:00Z
2019-05-09T09:06:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】multiple threads synchronization primitive: 多线程同步语义 多线程的同步语义是多线程编程的核心,线程之间通过同步语义进行通信,实现并发。C++ JAVA 中线程同步的基本原语是condition variable 和mutex构成的管程 ,OS操作系统课程 <a href="https://www.cnblogs.com/kkshaq/p/10839598.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/10832873.html
Linux thread process and kernel mode and user mode page table - kkshaq
Linux 中线程和进程切换的开销: Linux 操作系统层面的进程和线程的实现都是task_struct描述符. task_struct 包含成员变量:内核态stack. 这些都存在3-4G虚拟地址空间的内核态空间中。内核栈用于保存各个寄存器值:CS,DS,SS等. os层面的线程进程切换,都是在
2019-05-08T08:47:00Z
2019-05-08T08:47:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】Linux 中线程和进程切换的开销: Linux 操作系统层面的进程和线程的实现都是task_struct描述符. task_struct 包含成员变量:内核态stack. 这些都存在3-4G虚拟地址空间的内核态空间中。内核栈用于保存各个寄存器值:CS,DS,SS等. os层面的线程进程切换,都是在 <a href="https://www.cnblogs.com/kkshaq/p/10832873.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/10537698.html
c++ Initialization - kkshaq
c++ 的初始化过程比较复杂:根据对象的storage duration来分类。所谓storage duration是对象而言的,Storage duration is the property of an object that defines the minimum potential life
2019-03-15T08:06:00Z
2019-03-15T08:06:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】c++ 的初始化过程比较复杂:根据对象的storage duration来分类。所谓storage duration是对象而言的,Storage duration is the property of an object that defines the minimum potential life <a href="https://www.cnblogs.com/kkshaq/p/10537698.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/10445137.html
c++11 perfect forwarding - kkshaq
完美转发是c++11 引入右值引用之后,在template 中的延伸. 顾名思义,完美转发是将参数不改变属性的条件下,转发给下一个函数. 因为普通函数的参数一旦具名,始终都是lvalue. 如果把rvalue转发到下一个函数上的参数中,还是rvalue.这就是完美转发的目的。 那么如何支持完美转发呢
2019-02-27T09:19:00Z
2019-02-27T09:19:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】完美转发是c++11 引入右值引用之后,在template 中的延伸. 顾名思义,完美转发是将参数不改变属性的条件下,转发给下一个函数. 因为普通函数的参数一旦具名,始终都是lvalue. 如果把rvalue转发到下一个函数上的参数中,还是rvalue.这就是完美转发的目的。 那么如何支持完美转发呢 <a href="https://www.cnblogs.com/kkshaq/p/10445137.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/10443765.html
C++11 template parameter deduction - kkshaq
C++11 引入了右值引用的概念,由此在引出 an rvalue reference to a cv-unqualified template parameter. 在template function 推导中,我们需要推导出template parameter. 那么template functi
2019-02-27T07:01:00Z
2019-02-27T07:01:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】C++11 引入了右值引用的概念,由此在引出 an rvalue reference to a cv-unqualified template parameter. 在template function 推导中,我们需要推导出template parameter. 那么template functi <a href="https://www.cnblogs.com/kkshaq/p/10443765.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/10438677.html
Cache缓存设计 - kkshaq
缓存的适用场景: 缓存的目的是提高访问速度,减少不必要的开销,提高性能。那什么样的场景适用于缓存呢。试想一个多项式的计算是一个CPU bound的操作,如果频繁调用同一个多项式的结果。显然缓存结果是一个提高性能的方法。减少了不必要的CPU开销。另外就是提高访问速度。启动的时候,需要加载DB的数据到内
2019-02-26T09:16:00Z
2019-02-26T09:16:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】缓存的适用场景: 缓存的目的是提高访问速度,减少不必要的开销,提高性能。那什么样的场景适用于缓存呢。试想一个多项式的计算是一个CPU bound的操作,如果频繁调用同一个多项式的结果。显然缓存结果是一个提高性能的方法。减少了不必要的CPU开销。另外就是提高访问速度。启动的时候,需要加载DB的数据到内 <a href="https://www.cnblogs.com/kkshaq/p/10438677.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/10430364.html
c++11 enable_shared_from_this - kkshaq
本质的原因:raw data和引用计数的管理块,可能是分开的 使用场景: 需要在对象中得到shared ptr, 错误的代码:直接构造新的shared_ptr<A>对象,两个shared_ptr objects 是独立的,pointer to the same raw mem. 两个独立的manag
2019-02-25T05:09:00Z
2019-02-25T05:09:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】本质的原因:raw data和引用计数的管理块,可能是分开的 使用场景: 需要在对象中得到shared ptr, 错误的代码:直接构造新的shared_ptr<A>对象,两个shared_ptr objects 是独立的,pointer to the same raw mem. 两个独立的manag <a href="https://www.cnblogs.com/kkshaq/p/10430364.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/4802932.html
大数相乘 - kkshaq
http://www.cnblogs.com/jason-yang/archive/2012/04/26/2472755.html今天在网上看到一个大数相乘的问题,题目是这样的:输入两个整数,要求输出这两个数的乘积。输入的数字可能超过计算机内整形数据的存储范围。分析:由于数字无法用一个整形变量存储,...
2015-09-12T06:02:00Z
2015-09-12T06:02:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】http://www.cnblogs.com/jason-yang/archive/2012/04/26/2472755.html今天在网上看到一个大数相乘的问题,题目是这样的:输入两个整数,要求输出这两个数的乘积。输入的数字可能超过计算机内整形数据的存储范围。分析:由于数字无法用一个整形变量存储,... <a href="https://www.cnblogs.com/kkshaq/p/4802932.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/4710209.html
面试笔试(C++部分) - kkshaq
1.define 和const,inline的区别define的缺点:1.边界效应(必须加括号,才能避免边界效应)#define MUL(A,B) A*B而在使用的时候,这样的调用:int a=1,b=2,c=3,d=0;d=MUL(a+b,c)经过编译时候展开,就变成了d=a+b*c而不是我们所希...
2015-08-07T03:16:00Z
2015-08-07T03:16:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】1.define 和const,inline的区别define的缺点:1.边界效应(必须加括号,才能避免边界效应)#define MUL(A,B) A*B而在使用的时候,这样的调用:int a=1,b=2,c=3,d=0;d=MUL(a+b,c)经过编译时候展开,就变成了d=a+b*c而不是我们所希... <a href="https://www.cnblogs.com/kkshaq/p/4710209.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/4700081.html
sap server笔记 - kkshaq
system 就是sap hana database,如果一个system有多个instance,则必须分散到不同的host中,每个system有唯一的sid。hello各位,jackie建议我们去看一篇NOTE,编号是1681092,可以去chorme那里装一个SAP NOTE FINDER的插件...
2015-08-03T10:12:00Z
2015-08-03T10:12:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】system 就是sap hana database,如果一个system有多个instance,则必须分散到不同的host中,每个system有唯一的sid。hello各位,jackie建议我们去看一篇NOTE,编号是1681092,可以去chorme那里装一个SAP NOTE FINDER的插件... <a href="https://www.cnblogs.com/kkshaq/p/4700081.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/4696737.html
C++默认构造函数的问题 - kkshaq
C++ defaul construct :缺省构造函数(默认构造函数)定义:第一种 构造函数没有参数,即是 A()形式的 第二种 构造函数的全部参数由缺省值提供,A(int a=0,int b=0)编译器添加的默认构造函数的条件: 如果创建一个类你没有写任何构造函数,则系统会自动生成默认...
2015-08-02T13:09:00Z
2015-08-02T13:09:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】C++ defaul construct :缺省构造函数(默认构造函数)定义:第一种 构造函数没有参数,即是 A()形式的 第二种 构造函数的全部参数由缺省值提供,A(int a=0,int b=0)编译器添加的默认构造函数的条件: 如果创建一个类你没有写任何构造函数,则系统会自动生成默认... <a href="https://www.cnblogs.com/kkshaq/p/4696737.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/4685515.html
虚拟内存和虚拟地址空间 - kkshaq
虚拟地址空间:1 每个进程拥有独立的进程地址空间,这个每个进程相互独立,不同进程不能访问其他进程的地址空间,否则会长生错误。一个进程的错误操作,也只会影响这个进程,不会导致其他进程的奔溃2 实模式下的寻址方式,可以直接操作物理内存地址,但是不安全。任何进程都可以修改物理内存3 每个进程的独立的...
2015-07-29T03:44:00Z
2015-07-29T03:44:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】虚拟地址空间:1 每个进程拥有独立的进程地址空间,这个每个进程相互独立,不同进程不能访问其他进程的地址空间,否则会长生错误。一个进程的错误操作,也只会影响这个进程,不会导致其他进程的奔溃2 实模式下的寻址方式,可以直接操作物理内存地址,但是不安全。任何进程都可以修改物理内存3 每个进程的独立的... <a href="https://www.cnblogs.com/kkshaq/p/4685515.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/4682830.html
linux vmalloc和kmalloc - kkshaq
kmalloc是内核低端内存的分配,而vmalloc对应内核高端内存的分配。kmalloc()分配的内存处于3GB~high_memory之间,这一段内核空间与物理内存的映射。kmalloc保证分配的内存在物理上是连续的,vmalloc分配的是在虚拟地址空间上连续;
2015-07-28T07:02:00Z
2015-07-28T07:02:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】kmalloc是内核低端内存的分配,而vmalloc对应内核高端内存的分配。kmalloc()分配的内存处于3GB~high_memory之间,这一段内核空间与物理内存的映射。kmalloc保证分配的内存在物理上是连续的,vmalloc分配的是在虚拟地址空间上连续; <a href="https://www.cnblogs.com/kkshaq/p/4682830.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/4676497.html
select和epoll的实现 - kkshaq
select:fd_set是输入结果参数,每次select之后,还得重置fd_set(1)使用copy_from_user从用户空间拷贝fd_set到内核空间,第一步需要复制所有感兴趣的文件描述符到内核态(2)注册回调函数__pollwait(3)遍历所有fd,调用其对应的poll方法(对于sock...
2015-07-25T12:12:00Z
2015-07-25T12:12:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】select:fd_set是输入结果参数,每次select之后,还得重置fd_set(1)使用copy_from_user从用户空间拷贝fd_set到内核空间,第一步需要复制所有感兴趣的文件描述符到内核态(2)注册回调函数__pollwait(3)遍历所有fd,调用其对应的poll方法(对于sock... <a href="https://www.cnblogs.com/kkshaq/p/4676497.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/4672025.html
共享内存的原理:文件映射 - kkshaq
mmap()是将指定的文件利用虚拟内存技术映射到内存中去,在内存中建立页表项,但mmap()调用建立的页表项后面地址为空,只有使用到某个地址空间时才给此页面分配空间,要涉及到页面置换,因而需要有一定的物理内存做支撑,内存太小的话刚置入内存中的页面又要被交换到磁盘上,mmap的性能将大打折扣。mmap...
2015-07-23T14:57:00Z
2015-07-23T14:57:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】mmap()是将指定的文件利用虚拟内存技术映射到内存中去,在内存中建立页表项,但mmap()调用建立的页表项后面地址为空,只有使用到某个地址空间时才给此页面分配空间,要涉及到页面置换,因而需要有一定的物理内存做支撑,内存太小的话刚置入内存中的页面又要被交换到磁盘上,mmap的性能将大打折扣。mmap... <a href="https://www.cnblogs.com/kkshaq/p/4672025.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/4662840.html
根节点路径问题 - kkshaq
方法一:bottom-upNode *LCA(Node *root, Node *p, Node *q) { if (!root) return NULL; if (root == p || root == q) return root; Node *left = LCA(root->left...
2015-07-20T14:04:00Z
2015-07-20T14:04:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】方法一:bottom-upNode *LCA(Node *root, Node *p, Node *q) { if (!root) return NULL; if (root == p || root == q) return root; Node *left = LCA(root->left... <a href="https://www.cnblogs.com/kkshaq/p/4662840.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/4660073.html
c++类定义和类实现 - kkshaq
预备知识:c++中我们cpp文件和.h文件的区别是,cpp文件是需要编译的文件,成为一个独立的编译单元,而h文件从来是不需要编译,只是用于预处理。通常我们在cpp文件中,完成函数的实现,然后在h中则是对于函数的声明,由于默认情况下,全局变量和全局函数存储类型都是extern类型的,所以我们不需要显示...
2015-07-19T15:01:00Z
2015-07-19T15:01:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】预备知识:c++中我们cpp文件和.h文件的区别是,cpp文件是需要编译的文件,成为一个独立的编译单元,而h文件从来是不需要编译,只是用于预处理。通常我们在cpp文件中,完成函数的实现,然后在h中则是对于函数的声明,由于默认情况下,全局变量和全局函数存储类型都是extern类型的,所以我们不需要显示... <a href="https://www.cnblogs.com/kkshaq/p/4660073.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/kkshaq/p/4645177.html
Kth Smallest Element in a BST - kkshaq
class Solution {public: int kthSmallest(TreeNode* root, int k) { int num = 0; TreeNode*pNode=NULL; visit(root, k, num, pNode);...
2015-07-14T05:09:00Z
2015-07-14T05:09:00Z
kkshaq
https://www.cnblogs.com/kkshaq/
【摘要】class Solution {public: int kthSmallest(TreeNode* root, int k) { int num = 0; TreeNode*pNode=NULL; visit(root, k, num, pNode);... <a href="https://www.cnblogs.com/kkshaq/p/4645177.html" target="_blank">阅读全文</a>