c c++内存操作

从C/C++内存管理到ARM原子操作:系统编程内存技术实战 内存管理是系统编程和底层优化的核心,无论是开发高性能服务器、嵌入式系统,还是排查内存泄漏,理解内存分配机制都至关重要。今天我们不谈抽象概念,直接切入实战,聚焦于 C、C++ 和 ARM 汇编这三个关键领域,看看如何在不同层级上“精通内存”。对于 C/C++ 开发者而言,从 malloc/free 到自定义分配器是必经之路;而对于 ARM 平台开发者,理解从编译器内部函数到汇编指令的内存操作,则是实现极致性能和安全性的关键。本文将带你从高层语言到底层指令,系统性地掌握内存分配技术,并提供可直接验证的代码示例。 阅读详情
C
void * malloc ( size_t size );

Allocate memory block
Allocates a block of size bytes of memory, returning a pointer to the beginning of the block.

The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.

void * calloc ( size_t num, size_t size );

Allocate space for array in memory
Allocates a block of memory for an array of num elements, each of them size bytes long, and initializes all its bits to zero.

The effective result is the allocation of an zero-initialized memory block of (num * size) bytes.

c++

new

new操作不会初始化内存

总之 需要需要对内存初始化为0  安全第一




c/c++内存操作函数 是否初始化










strcpy  后面跟了0
strncpy 后面没跟0




















1、  有个好动的小孩,他还很小,不能象你一样一步爬很多楼梯,他最多一步爬两楼梯。他家的楼梯一共有N梯(2<=N<=100000),今天一直在那爬上爬下,有时一步一梯,有时候一步两梯。原来,他在尝试爬楼梯有多少有种爬法。噢,这个方法太笨太慢了,你能写个程序帮帮他吗?另外,如果你能让你的程序更快的计算出来那我们会对你打更高的分!

递归函数 f(n)= f(n-2)+ f(n-1)

int g_count = 0;

#define BIG_INT_SIZE    1024 * 2

typedef struct big_int_t
{
    unsigned char data[BIG_INT_SIZE];
}big_int;


void big_int_add(big_int *first, big_int *second, int first_n, int second_n);
void big_int_addadd(big_int *first, int first_n);
void big_int_equal(big_int *first, int first_n, int num);

void alg_recursion(int steps);


void main()
{

    int nStep = 0;
    printf("please enter step num :\n");
    scanf("%d", &nStep);
    if (nStep >= 2 && nStep <= 100000)
    {
//         calcStep(nStep);
        alg_recursion(nStep);
    }
    else
    {
        printf("step is error!.\n");
        printf("step must be >= 2     <= 100000!.\n");

        printf("step = %d\n", nStep);
    }
    printf("\n打印出来的是16进制数字\n");
    scanf("%d", &nStep);
}

void big_int_add(big_int *first, big_int *second, int first_n, int second_n)
{
    int i = second_n - 1;
    int j = first_n -1;

    int tmp = 0;
    int tmp2 = 0;

    big_int big_int_tmp = {0};

    for (i = second_n - 1; i >= 0; i --)
    {
        tmp = (int)first->data[i] + (int)second->data[i] + tmp2;
        big_int_tmp.data[i] = tmp;
        tmp2 = tmp >> 8;
    }
    memcpy(first, &big_int_tmp, BIG_INT_SIZE);
}

void big_int_addadd(big_int *first, int first_n)
{
    if (first->data[first_n - 1] == 0xff)
    {
        big_int_addadd(first, first_n - 1);
    }
    else
    {
        first->data[first_n - 1] ++;
    }
}

void big_int_equal(big_int *first, int first_n, int num)
{
    memset(first, 0, first_n);
    first->data[first_n - 1] = num;
    first->data[first_n - 2] = num >> 8;
    first->data[first_n - 3] = num >> 16;
    first->data[first_n - 4] = num >> 24;
}

big_int g_p1;
big_int g_p2;

big_int * calc_alg_p(int steps)
{
    //裴不拉切序列算法
    //1 2 3 5 8 13 21 34
    //1 2 3 4 5 6  7  8
    int i = 2;
    big_int_equal(&g_p1, BIG_INT_SIZE, 1);
    big_int_equal(&g_p2, BIG_INT_SIZE, 2);
    while (steps != i)
    {
        if (i % 2 == 0)
        {
            big_int_add(&g_p1, &g_p2, BIG_INT_SIZE, BIG_INT_SIZE);
        }
        else
        {
            big_int_add(&g_p2, &g_p1, BIG_INT_SIZE, BIG_INT_SIZE);
        }
        i ++;
    }
    if (steps % 2 == 0)
    {
        return &g_p2;
    }
    else
        return &g_p1;
}

void alg_recursion(int steps)
{
    //将数分解成
    //steps - 1 与 steps - 2
    //
    int i = 0;
    unsigned char byte_tmp = 0;
    big_int * p_tmp = calc_alg_p(steps);//calc_recursion(steps);

    //打印大数
    for (i = 0; i < BIG_INT_SIZE; i ++)
    {
        byte_tmp = p_tmp->data[i] >> 4;
        printf(" %x", byte_tmp);
        byte_tmp = p_tmp->data[i] & 0x0F;
        printf("%x", byte_tmp);
    }

    printf("\n");

}


c语言实现爬楼梯的算法解释
高效C/C++之九:Coverity修复问题:关于数组操作 和 内存操作 上一篇我们讲了这一篇我们开始讲高效C/C++之九:Coverity修复问题:关于数组操作 和 内存操作。 阅读详情

相关推荐

掌握C/C++内存管理与流操作技巧

本文深入探讨了C和C++中指针地址的打印技巧,流操作,以及内存管理的基础知识和高级技术。通过实例和代码示例,我们学习了如何使用cout和printf打印指针地址,格式化输出,以及如何在C++中进行文件操作。此外,文章还介绍了C++中内存管理的各个方面,包括手动内存管理、资源管理,以及内存泄漏和别名问题的处理。

weixin_28736145的博客 419

LeetCode 70. 爬楼梯 C/C++/Python

LeetCode 70. 爬楼梯 C/C++/Python。

仅以此博客记录日常学习工作中所思所得,水平有限,难登大雅,万望海涵。 1万+

Eureka自我保护机制

Eureka自我保护机制 默认情况下,当eureka server在一定时间内没有收到实例的心跳,便会把该实例从注册表中删除(默认是90秒),但是,如果短时间内丢失大量的实例心跳,便会触发eureka server的自我保护机制,比如在开发测试时,需要频繁地重启微服务实例,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews threshold和Renews(last

Soul_Ming的博客 543

【C语言】递归问题(爬楼梯)

爬楼梯递归问题

debug... 1万+

加权余量法求解偏微分方程

加权余量法(Weighted Residual Method)是一种数值方法,用于求解偏微分方程(PDEs)。其基本思想是将偏微分方程的残差(或余量)通过加权函数加权,并使加权余量在定义域上为零,从而形成一组代数方程进行求解。

leizhengshenglzs的博客 1792

实战六十四:基于机器学习朴素贝叶斯的豆瓣Top250影评的情感分析与预测 附完整源码和数据

实战六十四:基于机器学习朴素贝叶斯的豆瓣Top250影评的情感分析与预测 附完整源码和数据

1563

C语言入门算法——爬楼梯(了解动态规划)

了解动态规划,减小运行时间,在题目越来越难的情况下,原本的暴力手段已经不足以解决问题,只有通过学习不同的算法才能完成更高难度的题目,以下是本次总结。

yandadzf的博客 2824

微信对话开放平台智能对话模块的几个亮点

微信AI首席科学家牛成公布了最新开放方案,并重磅宣布全面开放各层次 NLP 能力。具体说来,微信 AI 迈出了“三大步”: 以硬件合作为核心的智言小微硬件开放平台 2.0 正式亮相; 公开以对话开放能力为核心的微信对话开放平台; 全面开放以自然语言处理能力为核心的 NLP 基础技术平台。 参考:微信9年:张小龙指明方向,微信AI全面开放NLP能力 今天公开课上隆重介绍了...

素质云笔记 1万+

C语言:走台阶问题(递归解法)

【代码】C语言:走台阶问题(递归解法)

2303_80025768的博客 3246

波浪补偿控制(AHC)之波浪发生器(CODESYS完整源代码)

波浪发生器平台详细算法和结构介绍请参看下面博客文章:CODESYS平台如何建立FC和FB,请参看下面博客文章:

RXXW_Dor的博客 401

【LAMMPS学习】四、运行 LAMMPS(2)命令行选项

本部分解释了在安装可执行文件或下载源代码并构建可执行文件后如何运行 LAMMPS。命令文档页面描述了输入脚本的结构以及它们可以包含的命令。

荷塘阅色 5242

LeetCode70.爬楼梯(C++实现)

LeetCode70.爬楼梯的题目如下: 方法一:直接递归实现(超时) 刚开始直接用递归实现,思路也是比较直接的,如下图,当n = 5的时候,有8种方法。 实现代码如下: void selectStair(int remainStep, int &amp;count) { if(remainStep == 0) { //当剩余步数为0,说明找到一种方法,计数加一 coun...

Magnum的博客 1万+

ansys 求解过程中出现未知错误。检查“求解信息”对象上的“求解器输出”,查找可能的原因。-静力学分析遇到的,这是什么原因——An unknown error occurred ——未找到解决方法

点击“确定”关闭弹窗后,进入Workbench的‌“求解信息”对象‌,查看‌“求解器输出”‌,搜索“Error”“Fatal”“Warning”等关键词,找到具体的错误描述,比如材料未定义、网格质量问题、内存不足等,这是精准解决问题的关键。进入“工具-选项-mechanical APDL”,取消勾选“分布式”,GPU加速器选择“none”。在“求解进程设置-高级”中调整内存分配参数,或切换为迭代求解器(如PCG求解器),它更省内存。尝试简化模型,比如删除非关键细节、合并重复部件,分步验证模型,定位问题源。

qq_15963745的博客 609

C/C++内存操作函数

C/C++内存操作函数

weixin_47604497的博客 516

K8s-K8s部署Zookeeper+Kafka+ELFK+持久化数据

K8s环境下容器化部署`Zookeeper+Kafka+ELFK`日志收集系统

✅ 专注企业级 Linux/DevOps 运维的实战派 ✅ 已输出上百篇可落地方案 ✅ Shell 脚本开箱即用 ✅ K8s/YAML 环境验证 ✅ 故障排查链路完整复现 1915

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

混搭下的C与C++内存操作

源自最近遇到一个的问题,先介绍一下背景。项目中混用了C与C++编程范式,鉴于项目成员背景不一,每个模块的负责人可以自行2选1。同时为了提高效率,C范式的模块被允许使用STL库的部分容器(其实也就仅仅大量使用了vector而已)。开发环境是visual studio 2005 wiht sp1。那么问题来了,在部分模块中,纯C结构体和包含C++类的结构体共存,但它们的内存布局是不同的,所需...

achekbj1914的博客 191

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C/C++内存操作函数&字符串操作函数差异与注意事项概览

在C和C++中,内存操作函数如malloc/free、new/delete、memcpy、memmove、memset等的使用非常普遍,但它们在C和C++中的用法和注意事项有一些细微的差别。本文详细讲解c/c++使用中的区别及注意事项的对比。

byte轻骑兵的技术小窝 1045

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C/C++ 4大内存操作函数全面对比

函数原型功能:按字节复制内存内容,将源地址(src)的前n个字节复制到目标地址(dest)。特点高效率,直接按字节块复制要求源和目标内存区域不重叠复制的是二进制数据,不关心内容含义返回目标地址dest的指针值最灵活的:memmove() - 可处理各种内存复制情况最高效的:memcpy() - 在确保内存不重叠时的首选最特殊的:memset() - 唯一用于填充而非复制的函数最受限的:strcpy() - 仅适用于字符串,且存在安全隐患。

抟土成人祖,炼石补青天。眼中览银河,手可摘星辰。 1193

C/C++ 内存操作和文件操作相关函数详解

C/C++ 内存操作相关函数详解

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 371

【C/C++】基础:常见字符串与内存操作库函数

在本篇博客中将介绍各种常见的字符串与内存操作库函数,希望通过查询资料,理解掌握库函数并且实现各种库函数,达成可以自主学习使用查询陌生库函数的目的。同时还需要注意各种每个库函数之间的细节。所有的资料查询来自:cplusplus.com - The C++ Resources Network

qq_66725576的博客 513

一文读懂 C/C++ 内存管理:从内存分布到动态内存操作

关于内存分布部分,以及new、delete

2302_76591114的博客 1282

C和C++的内存操作小贴士(一):const char*的内存释放问题

C和C++的内存操作一直是困扰开发人员的老问题,基本概念相信老司机们都很清楚了,在这里就不做过多的描述了,只是把在实际开发中可能遇到的一些小问题的案例列举下,供大家参考。“C和C++的内存操作小贴士”这个系列会一直做下去,不定期更新,欢迎大家来一起学习讨论。 C和C++的内存操作小贴士(一):const char*的内存释放问题

The Blog of Coder 1万+

C/C++内存操作

C/C++内存操作 内存操作的三种方法 一.从静态存储区分配 从静态存储区域分配。是指内存在程序编译的时候就已经分配好,这块内存在程序的整 个运行期间都存在。例如全局变量,static 变量。(未初始化的内存分配在bss区,初始化的在数据区) 二.在栈上创建 在栈上创建内存。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函 数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集(栈区) 中,效率很高,但是分配的内存容量有限。 三.从堆区分配 从堆上分配,亦称动态内存分配。程序在运行

liupeng_csdn的博客 1862

C C++ 输入输出、内存操作易混点解析

C C++ 输入输出、内存操作易混点解析

m19166的博客 204

C/C++语言特性(内存管理、指针操作、编译链接机制)

掌握C/C++语言特性(内存管理、指针操作、编译链接机制),熟悉面向对象编程(封装/继承/多态)

Chihiro1002的博客 798

[C/C++]更安全的内存操作替代函数

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34337265的博客 146
上一篇: LINUX标准io默认都是阻塞的
下一篇: LINUX 守护进程
RunBoying
博客等级 码龄17年 41粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值