首页 > 编程语言 >1——of C++ and Java togather

1——of C++ and Java togather

时间:2023-10-11 17:48:19浏览次数:36  
标签:文件 java togather C++ 编译 Java 链接

因为那个C++最全的笔记是从第18课开始做(笔者说18课之前都很基础),所以这里就对前18课的知识做个笔记总结

C++的工作过程

  • 这里提到的C++工作过程主要涉及两个:编译与链接
  • 之前考研时候学到,(在组成原理的某个章节),计算机的工作过程其实就涉及 “将源程序转换成可执行文件”,与其中便有许多雷同之处

编译

  • 编译之前程序需要进行预处理,Cherno说明预处理其实就是把include文件内容复制进来,然后会输出一个 xx.i 文件(上图有说明,包括视频之后会演示)
  • 一个cpp文件就是有一个翻译单元
  • 当我们运行vs的运行之后,翻译单元会 预处理-编译-(汇编)-链接,其中 xx.obj 是汇编后的二进制文件,而文件链接后就生成 xx.exe文件

链接

  • 链接就是把各个.obj,还有标准库连接起来。其中关键一点在于,连接焦点是要找到每个符号与函数在哪
  • ps:如果A.cpp中只写函数声明,而其他cpp文件没有函数,则会编译不会报错,运行时会出现链接错误

与Java对比

  • C++与Java虽然都同属于高级语言,但java属于解释性语言,也就是每解释一行代码就将其直接转换成机器码,然后执行
  • 虽然java有生成字节码,但字节码不是编译也不是翻译,就是单纯一个转换,字节码依旧属于高级语言范畴,需要又jvm解释成机器码才能运行

C/C++与java的变量定义、声明、初始化(或者还有分配内存?)

  int i; //c.c++直接定义,但java也相同
  int i=1;  

  class A{}
  A a; //但对于类或者结构体,c.c++也是直接定义并分配内存了,并且这是在栈内分配
  A* a=new A();  //c.c++也可通过指针定义,需要用new,但是在堆内分配

  A a;  //java这样的话只会分配句柄(引用),不会实际分配内容,其实底层就是C++指针实现
  a = new A();  //这样才有内存分配

更多待补充..

标签:文件,java,togather,C++,编译,Java,链接
From: https://www.cnblogs.com/jay-home/p/17757768.html

相关文章

  • C++ - 基于范围的 for 循环
    在C++98/03中,不同的容器和数组遍历的方式不尽相同,写法不统一,也不够简洁,而C++11基于范围的for循环可以以简洁、统一的方式来遍历容器和数组,用起来也更方便了。1.for循环新语法在介绍新语法之前,先来看一个使用迭代器遍历容器的例子:#include<iostream>#include<vector>......
  • C++ - move()函数
    C++11标准中借助右值引用可以为指定类添加移动构造函数,这样当使用该类的右值对象(可以理解为临时对象)初始化同类对象时,编译器会优先选择移动构造函数。注意,移动构造函数的调用时机是:用同类的右值对象初始化新对象。那么,用当前类的左值对象(有名称,能获取其存储地址的实例对象)初始化......
  • C++ - 使用using定义别名
    大家都知道,在 C++ 中可以通过typedef重定义一个类型:typedefunsignedintuint_t;被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。因此,下面这样将不是合法的函数重载:voidfunc(unsignedint);voidfunc(uint_t); //error:redefinition使用ty......
  • C++ - 右值引用
    《C++11是什么》一节中提到,在C++98/03标准的基础上,C++11标准对C++语言增添了约140个新特性。本节要讲的右值引用就是众多新特性中的一个,同时也是最重要的特性之一。很多初学者都感觉右值引用晦涩难懂,其实不然。右值引用只不过是一种新的C++语法,真正理解起来有难度的是基......
  • C++ - 单例模式实现
    1.什么是单例模式单例模式是指在整个系统生命周期内,保证一个类只能产生一个实例,确保该类的唯一性。为什么需要单例模式两个原因:节省资源。一个类只有一个实例,不存在多份实例,节省资源。方便控制。在一些操作公共资源的场景时,避免了多个对象引起的复杂操作。但是在实现单例......
  • C++回调C#方法
    在VC中封装的网络通信模块,在异步接收到数据时需要将内容传递给C#中的消息处理函数,于是便出现了如标题所说的情况。   C++的回调函数中有一个参数,是处理接收到的字节流的回调函数指针,定义基本如下:   typedefvoid(*fpDataReceived)(char*data,intlen);......
  • C++ - 多线程之线程管理函数
    1.获取线程id函数get_id()的使用该函数在命名空间std::this_thread下。作用是获取当前线程的id。#include<iostream>#include<thread>usingnamespacestd;//No.1get_id()获取线程idvoidthreadFunc(){ cout<<"get_id()子线程id:"<<this_thread::get_id(......
  • C++ - 多线程之带返回值的线程处理函数
    1.使用async函数创建线程1.1使用步骤使用async函数启动一个异步任务(创建线程,并且执行线程处理函数),返回future对象通过future对象中get()方法获取线程处理函数的返回值1.2基本数据类型作为返回值#include<iostream>#include<thread>#include<future>using......
  • C++ - 多线程之线程同步
    1.多线程的并发问题线程间为什么需要同步?直接来看一个例子:inta=0;voidfoo(){ for(inti=0;i<10000000;++i) { a+=1; }}intmain(){ clock_tstart,end; start=clock(); threadt1(foo); threadt2(foo); t1.join(); t2.join(); end=clock();......
  • C++ - VS2019配置pthread线程库
    1.说明在VS里用MS编译器不能直接调用pthread库,需要先自行下载该库:http://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip解压后用的到的只有Pre-built.2文件夹下的文件。 2.配置如下图分别配置三大项:包含目录-->...pthreads-w32-2-9-1-release\Pre-......