拷贝

知识拓展2

独自空忆成欢 提交于 2020-03-09 14:50:06
嵌入式操作实践中遇到的问题 1.gcc编译器用不了 利用gedit编写好代码后需要用gcc编译,但编译不了,原因可能是由于第一次用没有安装gcc。解决办法:用apt-get install gcc(如果用的不是高级权限,要在开头加sudo) 2.studio.h:No such file or directory解决方法 gcc安装后仍然编译不了,出现下面的情况: 一直怀疑是自己的代码写错了,但反复都是出现这个情况,所以上网搜索了解决方法,试了很多次最终成功了。 原因可能是安装ubantu时有些地方没有设置安装好,缺少libc6-dev 依次输入命令sudo apt-get update sudo apt-get upgrade sudo apt-get install libc6-dev 装完后就能使用了 期间我还遇过其他问题,比如安装build-essential时出现无法获得锁的情况 当时没有截图,所以借用的图。 要使用如下命令解除占有: sudo rm/var/lib/dpkg/lock-frontend 如果是/var/lib/dpkg/lock-open(11:资源暂时不可用) 则使用如下命令解除占有: sudo rm/var/lib/dpkg/lock 3.绝对路径相对路径 绝对路径:从根目录开始 相对路径:从当前路径开始的路径 举例:home目录下的0303目录

C++直接初始化,拷贝初始化,调用哪个构造函数?

浪子不回头ぞ 提交于 2020-03-09 09:46:30
很多C++新手不明白直接初始化、拷贝初始化,不清楚初始化过程中使用哪个构造函数。在学习过程中,要有基本概念,并且养成正确的认识也是非常重要的。因此整理了本文。 常见错误认识1: 1.使用()和使用=定义对象没什么区别。(直接初始化、拷贝初始化。) 2.直接初始化使用构造函数。(错,也可能使用拷贝构造函数。) 3.拷贝初始化使用拷贝构造函数。(错,也能使用构造函数。) 直接初始化 如果有一个新对象被定义(即创建了新对象),一定有构造函数被调用。 使用直接初始化时,我们实际上要求编译器使用普通的函数匹配,来提供参数最匹配的构造函数。因此直接初始化可能使用构造函数,也可能使用拷贝构造函数。 简单理解,用()来定义对象的就为直接初始化。 拷贝初始化 按字面意思理解即可,将一个对象给另一个对象初始化。 简单理解,用=定义对象的就为拷贝初始化。 注意: 拷贝赋值运算符也用在=的情况下,但是在对象已经创建并存在的情况下,只是修改对象的值而已。 而用=拷贝初始化是发生在定义一个对象的情况下,即对象此前尚未存在。 类定义如下: # include <string> # include <iostream> class Book { public : Book ( ) = default ; Book ( std :: string s ) : name ( s ) { std :: cout <<

进程和线程

假装没事ソ 提交于 2020-03-08 12:54:58
进程 #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { puts("Begin"); int pid = fork(); if(pid==0) { puts("Child"); }else { puts("Parent"); } puts("End"); } 在执行fork的时候产生一个子进程,根据pid区分是子进程,还是父进程,pid为0,表示子进程。 输出结果为: Begin Parent End Child End 注意点: 1、fork的时候拷贝父进程相同的代码,所以在输出的结果中可以看到两个End。 2、是子进程先输出,还是父进程先输出,依赖于具体的Linux内核。例子中的内核为 root@typhoeus79 ice_test_m guosong]# uname -a Linux typhoeus79 2.6.30-SINA BASE_1 SMP Wed Sep 2 20:30:47 CST 2009 x86_64 x86_64 x86_64 GNU/Linux 写时拷贝(COW) http://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.html 在Linux程序中,fork(

浅谈Java中的深拷贝和浅拷贝

拈花ヽ惹草 提交于 2020-03-08 05:59:59
  浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量。很简单: [java] view plain copy print ? int apples = 5; int pears = apples; int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。 但是如果你复制的是一个对象,情况就有些复杂了。 假设说我是一个beginner,我会这样写: [java] view plain copy print ? class Student { private int number; public int getNumber() { return number; } public void setNumber( int number) { this.number = number; } } public class Test { public static void main(String args[]) { Student stu1 = new Student(); stu1

蚂蚁二面,面试官问我零拷贝的实现原理,当场懵 了 …

╄→гoц情女王★ 提交于 2020-03-07 23:59:17
"哥,面试又跪了,碰到了知识盲区" "哪个?" "一面还可以,二面面试官问我零拷贝的原理,懵逼了...这块内容没去研究过" "哦,这个知识点,我之前应该有讲过,你没注意到?" "这东西工作中用不到,可能被我忽略了" "啧啧啧..." "哎,有空和我讲讲?" "先从简单开始,实现下这个场景:从一个文件中读出数据并将数据传到另一台服务器上?" "为啥写这个?" "你先写" "行..." 1分钟后 "我写了伪代码" "这里涉及到了几次数据拷贝?" "2次?磁盘拷贝到内存,内存拷贝到Socket?" "emmm,怪不得挂了,不冤" "这种方式一共涉及了4次数据拷贝,知道用户态和内核态的区别吗?" "了解" "行,文字有点干瘪,你先看这个图" 1、应用程序中调用 read() 方法,这里会涉及到一次上下文切换(用户态->内核态),底层采用DMA(direct memory access)读取磁盘的文件,并把内容存储到内核地址空间的读取缓存区。 2、由于应用程序无法访问内核地址空间的数据,如果应用程序要操作这些数据,得把这些内容从读取缓冲区拷贝到用户缓冲区。 read() 调用的返回引发一次上下文切换(内核态->用户态),现在数据已经被拷贝到了用户地址空间缓冲区,如果有需要,可以操作修改这些内容。 3、我们最终目的是把这个文件内容通过Socket传到另一个服务中,调用Socket的 send(

cudaMemcpyToSymbol使用

落花浮王杯 提交于 2020-03-07 17:44:16
学到了 cudaMemcpyToSymbol 竟然还有将数据从host拷贝到global的功能,以前只用过这个函数拷贝到constant memory。拷贝方式的不同是由目的内存申请的方式决定的。 申请的是device内存, cudaMemcpyToSymbol 拷贝就是从host拷贝到global memory。 申请的是constant内存, cudaMemcpyToSymbol 拷贝就是从host拷贝到constant memory。 __device__ float g_damp_x[MAX_DIM]; __constant__ float c_damp_y[MAX_DIM]; main.cu #include "error.cuh" #include <stdio.h> __device__ int d_x = 1; __device__ int d_y[2]; void __global__ my_kernel(void) { d_y[0] += d_x; d_y[1] += d_x; printf("d_x = %d, d_y[0] = %d, d_y[1] = %d.\n", d_x, d_y[0], d_y[1]); } int main(void) { int h_y[2] = {10, 20}; CHECK(cudaMemcpyToSymbol(d_y, h

...运算符

笑着哭i 提交于 2020-03-07 07:02:47
对象拷贝 let bar = { a : 1 , b : 2 } ; let baz = Object . assign ( { } , bar ) ; // { a: 1, b: 2 } baz . c = 3 console . log ( bar ) console . log ( baz ) //https://www.jianshu.com/p/c5aa1eee8dfd 运行结果 …枚举拷贝(因为是拷贝关系,所以不会存在原型修改) let bar = { a : 1 , b : 2 } ; let baz = { ... bar } ; // { a: 1, b: 2 } 覆盖关系 let bar = { a : 1 , b : 2 } ; let baz = { ... bar , ... { a : 2 , b : 4 } } ; // {a: 2, b: 4} 数组扩展运算符(数组我们一班通过拷贝普通赋值时地址指向同一个地方不可取) …作为参数 function add ( x , y ) { return x + y ; } const numbers = [ 4 , 38 ] ; add ( ... numbers ) // 42 数组赋值 let arr1 = [ 1 , 2 , 3 ] let arr2 = [ ... arr1 ] …运算符的结构赋值

浅拷贝和深拷贝

谁说胖子不能爱 提交于 2020-03-06 13:42:11
在学习原型模式时,发现对浅克隆和克隆的理解不深刻,在此记录下学习心得 概念理解: x.clone()!=x, 浅拷贝和深拷贝对属性的拷贝,如下表 基本类型属性 引用类型属性 引用类型备注 浅拷贝 拷贝值 拷贝引用,指向原引用的地址 如果修改引用的属性,都会影响另外一个对像 深拷贝 拷贝值 拷贝引用和引用的内容,并创建新的实例,指向新的地址 可以理解,创建一个新的对象,把原对象的内容复制到新对象中 代码解析 有一个Husband类 public class Husband {public int age; public Husband(int age){this.age = age; } public Husband(Husband p){ //拷贝构造方法this.age = p.age; } 还有一个Wife类 public class Wife { Husband husband; public Wife(Husband Husband){ this.husband = Husband; } public Wife(Wife wife){ //拷贝构造方法 this(wife.husband); } 测试是在Wife类进行, 执行拷贝Wife,和Husband Husband h = new Husband(24) Wife f1 = new Wife(h); Wife f2

LINUX常用指令(中)

孤街醉人 提交于 2020-03-06 12:50:54
LINUX 1、创建链接文件 (连接文件是新建的 ) a、创建软连接 ln -s 源文件名 连接文件名 特点:1、源文件和目标文件时刻同步 2、一旦删除源文件,连接文件将不可用;如果删除连接文件,源文件是可用 的 3、删除源文件,然后重新写一个同样名字的源文件,连接依旧存在,内容为新的源文件的内容 b、创建硬链接 ln 源文件 连接文件名 特点:1、源文件和连接文件时刻同步 2、删除源文件或者连接文件都不会影响另一个未被删除的文件 2、cp 文件或目录 拷贝 cp 源文件/目录 路径 (拷贝) cp 源文件 文件名(复制) cp -r 拷贝目录 cp -v 显示拷贝进度(不是进度条,显示的是拷贝方向) 3、mv 移动文件或目录(剪切) mv 文件 目录 重命名功能: mv 文件名1 文件名2 (把文件名1重命名为文件名2) 4、find 查找文件 find 路径 -name 文件名 5、grep 查找指定的内容 grep 查找信息 文件名 参数 -n(显示行号) 6、tar 压缩与解压缩 gzip格式 1、压缩用法:tar zcvf 压缩包包名 文件1 文件2… 例子: tar zcvf bk.tar.gz *.c 2、解压用法:tar zxvf 压缩包包名 例子: tar zxvf bk.tar.gz 解压到指定路径: tar zxvf 压缩包包名 -C 指定路径 7、tar 8

浅谈Python中的深拷贝与浅拷贝

狂风中的少年 提交于 2020-03-06 11:32:22
明确概念 要理解深拷贝和浅拷贝,我们要明白Python中的一个概念:当一个 变量 = xxx 的时候,即为这个变量指向了xxx 例如:a = [11,22] 即a指向了一个地址,这个地址中存放着[11,22] 初识深拷贝、浅拷贝 浅拷贝 a = [11, 22] b = a print(id(a)) print(id(b)) a.append(33) print(a) print(b) 结果(id一致) 1157228286408 1157228286408 [11, 22, 33] [11, 22, 33] 浅拷贝,b拷贝了a指向。a指向[11,22], a=b 使得b也指向[11,22],当列表append时,a和b都指向列表,所以都增加。 深拷贝 import copy a = [11, 22] c = copy.deepcopy(a) print(id(a)) print(id(c)) a.append(33) print(a) print(c) 结果(id不一致,a增加以后,c不增加) 2312887095752 2312887096264 [11, 22, 33] [11, 22] c深拷贝a,c指向了另一个地址,该地址将a指向的列表完全拷贝了一份,此时a和c没有任何关系,当a指向的列表append后,c指向的列表不会append。 浅拷贝