jjzjj

Allocation

全部标签

c - malloc(sizeof(int)) vs malloc(sizeof(int *)) vs (int *)malloc(sizeof(int))

我承认这三个都有不同的含义。但是,我不明白这些具体情况适用于哪些特定情况。任何人都可以分享每个例子吗?谢谢。malloc(sizeof(int))malloc(sizeof(int*))(int*)malloc(sizeof(int)) 最佳答案 malloc(sizeof(int))表示您正在从堆中分配空间来存储int。您将保留int所需的尽可能多的字节。这会返回一个你应该转换为int*的值。(指向int的指针。)正如一些人所指出的,C中的典型做法是让隐式转换来处理这个问题。malloc(sizeof(int*))表示您正在从堆中

c - malloc(sizeof(int)) vs malloc(sizeof(int *)) vs (int *)malloc(sizeof(int))

我承认这三个都有不同的含义。但是,我不明白这些具体情况适用于哪些特定情况。任何人都可以分享每个例子吗?谢谢。malloc(sizeof(int))malloc(sizeof(int*))(int*)malloc(sizeof(int)) 最佳答案 malloc(sizeof(int))表示您正在从堆中分配空间来存储int。您将保留int所需的尽可能多的字节。这会返回一个你应该转换为int*的值。(指向int的指针。)正如一些人所指出的,C中的典型做法是让隐式转换来处理这个问题。malloc(sizeof(int*))表示您正在从堆中

c - 确定 C 中动态分配内存的大小

C中有没有办法找出动态分配内存的大小?例如,之后char*p=malloc(100);有没有办法找出与p相关的内存大小? 最佳答案 没有找到此信息的标准方法。但是,一些实现提供了像msize这样的函数来执行此操作。例如:_msize在Windows上malloc_size在MacOS上malloc_usable_size在带有glibc的系统上但请记住,malloc将分配请求的最小大小,因此您应该检查您的实现的msize变体是否实际返回对象的大小或实际在堆上分配的内存。 关于c-确定C中

c - 确定 C 中动态分配内存的大小

C中有没有办法找出动态分配内存的大小?例如,之后char*p=malloc(100);有没有办法找出与p相关的内存大小? 最佳答案 没有找到此信息的标准方法。但是,一些实现提供了像msize这样的函数来执行此操作。例如:_msize在Windows上malloc_size在MacOS上malloc_usable_size在带有glibc的系统上但请记住,malloc将分配请求的最小大小,因此您应该检查您的实现的msize变体是否实际返回对象的大小或实际在堆上分配的内存。 关于c-确定C中

c++ - 为什么 malloc(0) 的返回值是实现定义的?

ISO/IEC9899:TC2(即C99标准),§7.20.3规定:Ifthesizeofthespacerequestediszero,thebehaviorisimplementation-defined:eitheranullpointerisreturned,orthebehaviorisasifthesizeweresomenonzerovalue,exceptthatthereturnedpointershallnotbeusedtoaccessanobject.换句话说,malloc(0)可能返回NULL或我不能取消引用的有效指针。这种行为背后的原因是什么?仅仅定义mal

c++ - 为什么 malloc(0) 的返回值是实现定义的?

ISO/IEC9899:TC2(即C99标准),§7.20.3规定:Ifthesizeofthespacerequestediszero,thebehaviorisimplementation-defined:eitheranullpointerisreturned,orthebehaviorisasifthesizeweresomenonzerovalue,exceptthatthereturnedpointershallnotbeusedtoaccessanobject.换句话说,malloc(0)可能返回NULL或我不能取消引用的有效指针。这种行为背后的原因是什么?仅仅定义mal

c++ - C++库应如何允许自定义分配器?

在C语言中,对于库而言,允许用户使用全局函数指针来自定义与malloc()类似的功能以及与free()类似的功能的自定义内存分配很简单。例如,SQLite使用这种方法。C++使事情变得有些复杂,因为分配和初始化通常是融合在一起的。从本质上讲,我们希望获得仅对库重写operatornew和operatordelete的行为,但是实际上无法做到这一点(我很确定,但不是100%)。应该如何在C++中完成?Here是用某种功能new复制Lib::make表达式的某些语义的工具。我不知道这是否有用,但只是为了好玩,here是一个更复杂的版本,它也尝试复制new[]表达式的语义。这是一个面向目标的

c++ - C++库应如何允许自定义分配器?

在C语言中,对于库而言,允许用户使用全局函数指针来自定义与malloc()类似的功能以及与free()类似的功能的自定义内存分配很简单。例如,SQLite使用这种方法。C++使事情变得有些复杂,因为分配和初始化通常是融合在一起的。从本质上讲,我们希望获得仅对库重写operatornew和operatordelete的行为,但是实际上无法做到这一点(我很确定,但不是100%)。应该如何在C++中完成?Here是用某种功能new复制Lib::make表达式的某些语义的工具。我不知道这是否有用,但只是为了好玩,here是一个更复杂的版本,它也尝试复制new[]表达式的语义。这是一个面向目标的

c++ - 如何实现内存堆

不完全确定如何表达标题,但问题是:我听说程序员会在程序开始时分配一大块连续内存,然后根据需要进行处理。这与每次需要内存时都简单地访问操作系统相反。我听说这会更快,因为它可以避免不断向操作系统询问连续的内存块的成本。我相信JVM就是这样做的,它维护自己的内存部分,然后从中分配对象。我的问题是,如何实际实现这一点? 最佳答案 大多数C和C++编译器已经提供了堆内存管理器作为标准库的一部分,因此您根本不需要做任何事情来避免每次请求都会影响操作系统。如果您想提高性能,周围有许多改进的分配器,您可以简单地链接并使用它们。例如Hoard,在一个

c++ - 如何实现内存堆

不完全确定如何表达标题,但问题是:我听说程序员会在程序开始时分配一大块连续内存,然后根据需要进行处理。这与每次需要内存时都简单地访问操作系统相反。我听说这会更快,因为它可以避免不断向操作系统询问连续的内存块的成本。我相信JVM就是这样做的,它维护自己的内存部分,然后从中分配对象。我的问题是,如何实际实现这一点? 最佳答案 大多数C和C++编译器已经提供了堆内存管理器作为标准库的一部分,因此您根本不需要做任何事情来避免每次请求都会影响操作系统。如果您想提高性能,周围有许多改进的分配器,您可以简单地链接并使用它们。例如Hoard,在一个