当前位置: 首页 > wzjs >正文

旅游网站建设的背景网站建设公司怎么开

旅游网站建设的背景,网站建设公司怎么开,小程序用什么开发,网站生成海报功能怎么做的在 C 语言中,动态内存管理主要依赖于标准库中的一组函数。以下是 malloc 及其同类函数的详细说明: 1. 基础动态内存分配函数 (1) malloc void* malloc(size_t size); 功能:分配指定字节数的未初始化内存。 特点: 内存内容未初始…

在 C 语言中,动态内存管理主要依赖于标准库中的一组函数。以下是 malloc 及其同类函数的详细说明:


1. 基础动态内存分配函数

(1) malloc

void* malloc(size_t size);
  • 功能:分配指定字节数的未初始化内存。

  • 特点

    • 内存内容未初始化(可能包含随机值)。

    • 分配失败时返回 NULL

  • 示例

    
    int *arr = (int*)malloc(10 * sizeof(int)); // 分配10个int的空间

(2) calloc

void* calloc(size_t num, size_t size);
  • 功能:为 num 个元素分配连续内存,并将内存初始化为零。

  • 特点

    • 内存内容初始化为全零。

    • 适合分配数组或结构体数组。

  • 示例

    
    int *arr = (int*)calloc(10, sizeof(int)); // 分配并初始化10个int

(3) realloc

void* realloc(void* ptr, size_t new_size);
  • 功能:调整已分配内存块的大小。

  • 特点

    • ptr 必须是 malloc/calloc/realloc 返回的指针。

    • new_size 为 0 时等效于 free(ptr)

    • 可能返回新地址,需重新接收返回值。

  • 示例

    
    arr = (int*)realloc(arr, 20 * sizeof(int)); // 扩展为20个int

(4) free

void free(void* ptr);
  • 功能:释放动态分配的内存。

  • 注意

    • 只能释放由 malloc/calloc/realloc 分配的内存。

    • 释放后应将指针置为 NULL,避免悬空指针。

    
    free(arr);
    arr = NULL; // 防止误用


2. 高级内存管理函数

(1) aligned_alloc (C11 引入)

void* aligned_alloc(size_t alignment, size_t size);
  • 功能:分配对齐到 alignment 字节的内存。

  • 要求

    • size 必须是 alignment 的整数倍。

  • 示例

    
    int *arr = (int*)aligned_alloc(64, 1024); // 64字节对齐

(2) valloc (已废弃,POSIX 标准)

void* valloc(size_t size);
  • 功能:分配页面对齐的内存(类似 aligned_alloc,但对齐到页面大小)。

  • 注意:已被 aligned_alloc 或 posix_memalign 替代。


3. 非标准扩展函数

(1) alloca (栈上分配,非标准)

void* alloca(size_t size);
  • 功能:在栈上分配内存(函数返回时自动释放)。

  • 风险

    • 可能导致栈溢出。

    • 不可跨函数使用。

  • 示例

    
    int *arr = (int*)alloca(10 * sizeof(int)); // 栈内存,无需手动释放

(2) memalign (已过时)

void* memalign(size_t alignment, size_t size);
  • 功能:类似 aligned_alloc,但不受 C 标准约束。

  • 替代:优先使用 aligned_alloc


4. 调试工具函数

(1) malloc_usable_size (GNU 扩展)

size_t malloc_usable_size(void* ptr);
  • 功能:查询实际分配的内存块大小(可能大于请求值)。

  • 示例

    
    size_t real_size = malloc_usable_size(arr); // 实际分配的内存大小


5. 内存操作函数

(1) memset

void* memset(void* ptr, int value, size_t num);
  • 功能:将内存块填充为指定值。

  • 常用场景:初始化内存(替代 calloc 的部分功能)。

(2) memcpy / memmove

void* memcpy(void* dest, const void* src, size_t num);
void* memmove(void* dest, const void* src, size_t num);
  • 功能:复制内存内容。

  • 区别memmove 可处理内存重叠区域。


使用注意事项

  1. 检查返回值malloc/calloc/realloc 可能返回 NULL,需检查分配是否成功。

    
    if (arr == NULL) {fprintf(stderr, "内存分配失败!");exit(EXIT_FAILURE);
    }

  2. 避免内存泄漏

    • 确保每个 malloc/calloc 都有对应的 free

    • 使用工具(如 Valgrind)检测内存泄漏。

  3. 防止悬空指针

    
    free(ptr);
    ptr = NULL; // 释放后置空

  4. 对齐要求

    • 处理 SIMD 指令或硬件访问时,使用 aligned_alloc 确保内存对齐。


总结

函数用途初始化内存来源
malloc分配未初始化内存
calloc分配并清零内存
realloc调整已分配内存大小保留数据
free释放内存-
aligned_alloc对齐内存分配
alloca栈上分配(自动释放)

根据需求选择合适的函数,并始终遵循谁分配谁释放的原则!

http://www.dtcms.com/wzjs/842066.html

相关文章:

  • 哈密地网站建设asp商业网站源码
  • 唐山网站专业制作wordpress 收费吗
  • 做个类似淘宝的网站怎么做深圳市工程建设网站
  • 渝水区城乡建设局网站建筑设计专业的网站
  • 安徽方圆建设有限公司网站网站如何收录
  • 对网站二次开发的认识做网站的详细教程
  • 竞拍网站做烂了网页设计的目的与要求
  • 下载素材的网站团购网站 如何做推广
  • 垂直型跨境电商平台seo短视频新地址在哪里
  • 怎样优化自己的网站深圳网页制作招聘网
  • 青海网站建设费用价格网站开发毕业答辩演讲稿范文
  • 公司网站建设需要多少钱千华网鞍山门户网站
  • 平台网站怎么建设电商网站建设如何
  • 用lnmp做网站建设一个最普通网站要多少钱
  • 网站建设方案书 百度网站建设免费模板下载
  • 网站开发外包公司坑济南网站建设 行知科技
  • 乐清网站制作推广重庆网站建设微信开发
  • 类似wordpress的博客怎么自己优化网站
  • 网站建设分前端和后台吗网站主题类型
  • 网站建设的主要作用wordpress左侧目录主题
  • 做程序的网站腾讯公司网站
  • 网站开发技术选型桂林象鼻山图片
  • wordpress好用的富文本编辑器如何做企业网站优化
  • html5美食网站青岛网站建设详细内容
  • asp个人网站怎么建设上海定制网站开发营销推广
  • 软件开发计划模板网站推广与优化方案
  • 郑州全网营销seo推广公司哪家好
  • 购物网站建设模板图片大公司网站建设建网站
  • 广州网站设计我选刻wordpress评论页面美化
  • 重庆市工程建设信息网新网站iis网站发布默认首页