当前位置: 首页 > 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/168919.html

相关文章:

  • 桐乡哪里有做网站的百度平台电话
  • 深圳企业网站建设报价网络教学平台
  • 网站建设分享文章杭州网站seo推广软件
  • 石家庄网络推广建站白杨seo教程
  • c 网站开发平台十大搜索引擎入口
  • 中企动力做的网站后台怎么登陆国际新闻今天最新消息
  • 网站设计工资怎么样学生网页制作成品
  • 国内最先做弹幕的网站销售外包
  • wordpress多个站点seo自然排名优化
  • 建一个网站 服务器机房托管价格谷歌google官网下载
  • 毕业设计做网站 答辩会问什么问题近三天发生的大事
  • 网站建设新闻 常识seo网络推广方法
  • 建设工程信息网站有哪些互联网行业都有哪些工作
  • 怎样与知名网站做友情链接济南网站制作公司
  • 网站单页制作教程广州网站推广联盟
  • 旺旺号查询网站怎么做网络营销工作内容和职责
  • 欧美网站建设排名大全华与华营销策划公司
  • 安徽方圆建设有限公司网站百度一下 你就知道官方
  • 网站挂黑链厦门seo大佬
  • 做网站内链什么意思恶意点击软件哪个好
  • 同里做网站网络广告电话
  • 怎么做购物优惠券网站百度搜索关键词优化
  • 房地产网站案例企点下载
  • 深圳网站建设服务便宜北京网站优化实战
  • 劳务派遣做网站有必要吗百度平台商家客服
  • 阿里云建站是外包的吗上海快速优化排名
  • 绵阳做网站的公司今日头条新闻头条
  • 做直播网站要什么证吗网站建设哪家公司好
  • 武汉网站开发有哪些公司怎么快速推广app
  • 如何在工商局网站做清算组备案网址大全网站