存储期类别
文章目录
- 前言
- 一、自动存储期(Automatic Storage Duration)
- 二、静态存储期(Static Storage Duration)
- 三、动态存储期(Dynamic Storage Duration)
- 四、线程存储期(Thread Storage Duration)
- 总结
前言
在编程中,存储期(Storage Duration) 指的是变量在程序中存在的时间段。C 语言中主要有以下几种存储期:
一、自动存储期(Automatic Storage Duration)
- 定义:变量在其作用域内自动分配内存,当离开作用域时自动释放。
- 示例:局部变量。
- 特点:变量在函数调用时创建,在函数返回时销毁。内存空间由栈管理,通常分配和释放速度较快。
示例 :
void function() {int localVar = 10; // 自动存储期
} // localVar 在此处被销毁
二、静态存储期(Static Storage Duration)
- 定义:变量在程序的整个运行期间存在,直到程序结束时才释放。
- 示例:全局变量和使用
static关键字定义的变量。 - 特点:在程序开始时分配内存,并在整个程序生命周期内保持。静态变量在函数调用之间保持其值。
示例 :
int globalVar = 20; // 静态存储期void function() {static int staticVar = 30; // 静态存储期staticVar++;
}
三、动态存储期(Dynamic Storage Duration)
- 定义:变量在运行时动态分配内存,程序员需要手动管理内存的分配和释放。
- 示例:使用
malloc、calloc、realloc等函数分配的内存。 - 特点:变量的生命周期由程序员控制,直到调用
free释放内存。适合需要在运行时动态调整大小的情况。
示例 :
#include <stdlib.h>void function() {int* dynamicVar = (int*)malloc(sizeof(int)); // 动态存储期*dynamicVar = 40;free(dynamicVar); // 释放内存
}
四、线程存储期(Thread Storage Duration)
- 定义:变量在其所属线程的整个生命周期内有效,直到线程结束时才被销毁。
- 示例:可以使用
__thread关键字(在某些编译器中)或 POSIX 线程库提供的 pthread_key_t 来实现线程存储期的变量。 - 特点:每个线程都有自己的存储空间,线程存储期的变量对其他线程不可见。线程存储期的变量在线程创建时分配内存,并在该线程结束时自动释放。适合存储线程特有的数据,如线程的状态、局部缓存等。
示例 :
#include <stdio.h>
#include <pthread.h>__thread int threadLocalVar = 0; // 线程存储期变量void* threadFunction(void* arg) {threadLocalVar++; // 每个线程都有自己的 threadLocalVarprintf("Thread %ld: threadLocalVar = %d\n", (long)arg, threadLocalVar);return NULL;
}int main() {pthread_t threads[2];for (long i = 0; i < 2; i++) {pthread_create(&threads[i], NULL, threadFunction, (void*)i);}for (int i = 0; i < 2; i++) {pthread_join(threads[i], NULL);}return 0;
}
总结
理解存储期有助于更好地管理内存和变量的生命周期,从而提高程序的效率和安全性。
相关文章:
存储期类别
文章目录 前言一、自动存储期(Automatic Storage Duration)二、静态存储期(Static Storage Duration)三、动态存储期(Dynamic Storage Duration)四、线程存储期(Thread Storage Duration&#x…...
开源模型应用落地-Qwen2-VL-7B-Instruct-vLLM-OpenAI API Client调用
一、前言 学习Qwen2-VL ,为我们打开了一扇通往先进人工智能技术的大门。让我们能够深入了解当今最前沿的视觉语言模型的工作原理和强大能力。这不仅拓宽了我们的知识视野,更让我们站在科技发展的潮头,紧跟时代的步伐。 Qwen2-VL 具有卓越的图…...
风电叶片损伤YOLO检测数据集(猫脸码客第229期)
风电叶片损伤检测:为清洁能源保驾护航 一、风电叶片:清洁能源的关键组件 风电叶片作为风力发电的核心组件,在将风能转化为电能的过程中起着至关重要的作用。它犹如巨大的风车翅膀,捕捉流动的风,将其转化为机械能&…...
修改 RN 打包后生成的app-release 安装包的名称
在React Native项目中,修改打包后生成的Android app-release.apk 安装包的名称通常涉及修改Android的构建配置。以下是详细步骤: 修改Android打包后的APK名称 找到build.gradle文件: 打开你的React Native项目中的android/app/build.gradle文…...
大模型EfficientSam用于图像语义分割自动标注
安装labelme Labelme安装及使用教程-CSDN博客 pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple 在安装的过程中因为会需要pyqt5 error: subprocess-exited-with-error Building wheel for PyQt5-sip (pyproject.toml) did not run successfully. │ exit …...
一个关于@JsonIgnore的isxxx()问题
一个关于JsonIgnore的问题 版本:2.13.5 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><optional>true</optional></dependency>代码: Data public clas…...
Django-cookie,session
Cookie简介 Cookie,有时也用Cookies,是指web程序为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密),一般是以键值对的形式存在,Cookie具有不可跨域名性 Cookie是http协议中…...
HarmonyOS开发 - 本地持久化之实现LocalStorage支持多实例
用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。 在上一篇中&…...
【已解决,含泪总结】非root权限在服务器Ubuntu18.04上配置python和torch环境,代码最终成功训练(二)
配置torch环境 pip升级 因为一些包安装不成功可能和pip版本有关,所以先升级pip 吸取之前python有多个版本的经验,所以我指定了Python版本的pip进行升级 就是python3.8版本: /home/某某/Python3.8/bin/python3.8 (要换成你实际的…...
Flutter鸿蒙next 刷新机制的高级使用【衍生详解】
✅近期推荐:求职神器 https://bbs.csdn.net/topics/619384540 🔥欢迎大家订阅系列专栏:flutter_鸿蒙next 💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路…...
c/c++--静态变量和静态函数(static)
目录 1 c静态函数和静态变量 1.1 C静态成员函数: 1.1.1定义与基本语法 1.1.2 不依赖于实例 1.1.3 访问限制 1.1.4共享数据 1.1.5 作用域与命名 1.1.6 工厂函数和工厂方法(常用途) 1.2 c静态函数() 1.3c静态变量 …...
Windows系统启动MongoDB报错无法连接服务器
文章目录 发现问题解决办法 发现问题 1)、先是发现执行 mongo 命令,启动报错: error: MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017; 2)、再检查 MongoDB 进程 tasklist | findstr mongo 发现没有进程&a…...
Linux的makefile与进度条小程序实践
makefile make命令主要功能使用方法常用选项 makefile文件基本结构使用案例变量定义内置变量(即系统定义的确定变量)伪目标模式规则条件语句注释makefile中的常用函数 进度条小程序创建文件编辑.h文件编辑.c文件创建main函数makefile文件执行效果 make命令 在linux中ÿ…...
latex写作基础
参考:https://www.bilibili.com/video/BV1ku4y1X7Rz 在线latex:https://cn.overleaf.com/ tex文件基本结构 \documentclass{article} % 文档类型,%是注释\usepackage{graphicx} % 导入各种包,这里是graphicx包\titl…...
Chromium HTML5 新的 Input 类型email对应c++
一、Input 类型: email email 类型用于应该包含 e-mail 地址的输入域。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head> <body><form action"demo-form.php"…...
嵌入式Linux的AXI平台(platform)驱动教程
本文以JFMQL100的Linux系统的AXI接口的平台驱动为例,介绍嵌入式Linux的平台驱动编写、测试软件编写以及验证方式。本文的方法适用于任意嵌入式芯片Linux的物理地址映射的平台(platform)驱动的编写、测试与应用。 本文中AXI的开始地址为0x8000…...
什么是Java策略模式?与Spring的完美结合
文章目录 什么是策略模式?策略模式的组成部分: 策略模式的示例在Spring中的妙用1. 使用Spring配置2. 在上下文中选择策略3. 动态切换策略 总结推荐阅读文章 在软件设计中,策略模式是一种非常常见的设计模式,它能够让算法的变化独立…...
[Go实战]:HTTP请求转发
前言 在Web应用开发中,请求转发是一项核心且常见的功能,用于负载均衡、服务拆分、路由重定向和业务逻辑处理。通过在Go语言中封装一个通用的HTTP请求转发方法,我们可以简化代码结构,提升可读性、可维护性和可扩展性。本文将探讨如…...
【C++单调栈 贡献法】907. 子数组的最小值之和|1975
本文涉及的基础知识点 C单调栈 LeetCode907. 子数组的最小值之和 给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。 由于答案可能很大,因此 返回答案模 109 7 。 示例 1&#x…...
极狐GitLab 17.5 发布 20+ 与 DevSecOps 相关的功能【二】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
