
C/C++
文章平均质量分 55
C/C++相关知识
Quan_2022
把每一招、每一式融会贯通,然后尽量忘得一干二净
展开
-
图说C++对象模型:对象内存布局详解
https://www.cnblogs.com/QG-whz/p/4909359.html转载 2021-10-06 21:15:39 · 295 阅读 · 0 评论 -
C++四种强制类型转换总结
一、C强制转换与C++强制转换c语言强制类型转换主要用于基础的数据类型间的转换,语法为:(type-id)expression//转换格式1type-id(expression)//转换格式2c++除了能使用c语言的强制类型转换外,还新增了四种强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast,主要运用于继承关系类间的强制转化,语法为:static_cast<new_type> (expression)d原创 2021-10-02 00:51:48 · 2864 阅读 · 0 评论 -
malloc底层原理
参考博文:https://www.cnblogs.com/zpcoding/p/10808969.html1、brk是将数据段(.data)的最高地址指针_edata往高地址推;2、mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问已分配的虚拟地址空间的时候,发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。在标准C库中,提供了malloc/free函数分配释放内存,原创 2021-09-04 14:49:02 · 204 阅读 · 0 评论 -
C语言双向升序单向链表的创建,插入删除操作,代码经过验证
#include <stdio.h>#include <stdlib.h>typedef struct n { int data; struct n* pre; struct n* next; }*node;node create_node();void print(node head);node insert(node head, int i);node deleteNode(node head, int i);int main(原创 2021-08-14 23:18:01 · 343 阅读 · 0 评论 -
C++中Static关键字的作用
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、全局静态变量• 变量在全局数据区分配内存;• 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);• 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;2、局部静态变量• 变量在全局数据区分配内存;• 静态局部变量在程序执行原创 2021-08-08 13:55:41 · 3652 阅读 · 1 评论 -
如何定义一个只在堆上创建对象的类,如何定义一个只在栈上创建对象的类
1、只能建立在堆上类对象只能建立在堆上,就是不能静态建立类对象,即不能直接调用类的构造函数。容易想到将构造函数设为私有。在构造函数私有之后,无法在类外部调用构造函数来构造类对象,只能使用new运算符来建立对象。然而,前面已经说过,new运算符的执行过程分为两步,C++提供new运算符的重载,其实是只允许重载operator new()函数,而operator()函数用于分配内存,无法提供构造功能。因此,这种方法不可以。当对象建立在栈上面时,是由编译器分配内存空间的,调用构造函数来构造栈对象。当对象使用转载 2021-08-06 23:07:02 · 191 阅读 · 0 评论 -
strcpy() 函数的底层实现,一步步分析
strcpy 函数的实现已知strcpy函数的原型是:char *strcpy(char* dst, const char *src);1、实现strcpy函数2、解释为什么要返回 char*3、假如考虑dst和src内存重叠的情况,strcpy该怎么实现1、strcpy的实现代码char* strcpy( char* dst,const char *src ) //[1]{ assert(dst != NULL && src != NULL); //[2转载 2021-06-22 23:01:11 · 1149 阅读 · 0 评论 -
常量指针 const int*与指针常量 int *const指向对象的类型与区分方法,用代码分析
const 的语法虽然变化多端,但并不是高深莫测。如果关键字 const出现在星号左边,表示被指之物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示所指物和指针两者都是常量。#include <iostream>using namespace std;int main(){ int a = 1; int b = 2; // non-const pointer,non-const data int* p1 = &a;原创 2021-06-03 20:59:19 · 143 阅读 · 0 评论 -
C++内存相关问题总结
1、以下为WindowsNT 32位C++程序,请计算下面sizeof的值 char str[] = "hello"; char* p = str; int n = 10; // 请计算 sizeof(str) = ? sizeof(p) = ? sizeof(n) = ? void Func(char str[100]) { // 请计算 sizeof(str) = ? } void* p = malloc(100); // 请计算 size原创 2021-05-22 14:51:57 · 869 阅读 · 0 评论 -
函数的调用过程,从汇编和内存的角度分析
函数的调用过程 —— 从反汇编和内存的角度分析程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。函数调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构(call stack)。编译器使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文)以备恢复以及存储本地局部变量。一、汇编语言基础知识回顾1、X86汇编语言的差异X86 下常用的汇编有 AT&T 与 Intel 两种,二者在语法上有一定的差原创 2021-04-22 22:11:37 · 1676 阅读 · 0 评论 -
引用的意义,普通引用和const引用,引用的本质,引用与指针的区别于相同点
引用的概念引用可以看做是一个已定义变量的别名引用的语法: Type& name = var;int a = 4;int& b = a; // b为a的别名 (普通引用在定义时必须使用同类型的变量进行初始化)b = 5; // 操作b就是操作a引用的意义C++中的引用旨在大多数的情况下代替指针功能性:可以满足多数需要使用指针的场合安全性:可以避开由于指针操作不当带来的内存错误操作性: 简单易用,又不失功能强大普通引用 int a = 4;原创 2020-12-13 23:00:42 · 356 阅读 · 0 评论 -
C与C++区别,C到C++的升级
C++与C的关系C++ = C 结构化编程 + 面向对象(OO)+ STL(模板)泛型编程C++继承了所有的C特性C++在C的基础上增加了很多新特性C++设计的目标是运行效率与开发效率的统一从C到C++的升级1.更加强调语言的实用性C++所有变量都可以在需原创 2020-12-13 14:46:15 · 315 阅读 · 0 评论