【问题标题】:What role does type casting play in dynamic memory allocation?类型转换在动态内存分配中扮演什么角色?
【发布时间】:2017-09-05 21:19:07
【问题描述】:

据我所知,动态内存分配可以在 C 中使用 malloc 函数完成:

     int *p = (int *)malloc(sizeof(int))

我的问题是:

  1. 动态内存分配是如何工作的,它与正常方法(即静态分配)在工作方面有何不同?

  2. (int *)malloc()函数之前的作用是什么?

  3. 类型转换在这里扮演什么角色? (如果是这样的话)

【问题讨论】:

    标签: c memory dynamic malloc allocation


    【解决方案1】:

    动态内存分配是如何工作的,在工作方面与普通方法有何不同?

    您有一个库来管理在运行时从操作系统分配的内存页。该库管理这些页面并将它们细分以处理由 malloc() 调用发出的通常较小的请求。

    相比之下,静态变量是由链接器和加载器分配的。链接器定义程序在内存中的布局,并创建一个可执行文件,其中包含供加载程序设置程序初始状态的指令。

    malloc() 函数之前的语句 (int *) 的作用是什么?

    消除您可能从隐式 (void*) 到 (int*) 转换中获得的警告消息

    类型转换在这里扮演什么角色? (如果是这样的话)

    见上文。

    【讨论】:

    • 正常方法是指静态内存分配。静态和动态内存分配的工作方式有什么区别?
    • C 编译器不会生成这样的警告。在 C++ 中,您应该使用 new 而不是 malloc,后者也不需要显式强制转换。
    • 应该没有警告信息;如果有,那么重要的是阅读不应消除的内容(例如,您没有包含 stdlib.h)
    【解决方案2】:

    默认情况下malloc() 返回一个空指针。

    【讨论】:

    • 我看不出这如何回答问题或改进/扩展上面已经发布的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多