Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
能说会道的宏g_slice_新问题_C_Glib - Fatal编程技术网

能说会道的宏g_slice_新问题

能说会道的宏g_slice_新问题,c,glib,C,Glib,这个问题与glibforc编程有关。 原始代码如下: 在glist.h中,我看到了宏_g_list_alloc0,我想知道它是如何实现的。所以我回过头来 #define _g_list_alloc0() g_slice_new0 (GList) 接下来,返回到宏g_slice_new0 #define g_slice_new0(type) ((type*) g_slice_alloc0 (sizeof (type))) 好的,回到 gpointer g_slice_alloc0 (gsi

这个问题与glibforc编程有关。 原始代码如下:

在glist.h中,我看到了宏_g_list_alloc0,我想知道它是如何实现的。所以我回过头来

#define _g_list_alloc0() g_slice_new0 (GList)
接下来,返回到宏g_slice_new0

#define  g_slice_new0(type) ((type*) g_slice_alloc0 (sizeof (type)))
好的,回到

gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
对于G_GNUC_MALLOC,我发现它实际上是:

#define G_GNUC_MALLOC __attribute__((__malloc__))
#define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
我对最后两个宏G_GNUC_MALLOC和G_GNUC_ALLOC_SIZE感到困惑

我是否可以将G_GNUC_ALLOC_大小(1)和G_GNUC_MALLOC替换为:

__attribute__((__alloc_size__(1)))
__attribute__((__malloc__))
因此,替换宏

gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
宏实际上定义如下:

gpointer g_slice_allo0 (gsize block_size) 
__attribute__((__malloc__))   __attribute__((__alloc_size__(1)))
我的问题: 什么表情

__attribute__((__malloc__))   __attribute__((__alloc_size__(1)))
工作还是产生?我想它是这样工作的

malloc(sizeof()) 
它根据sizeof分配内存。 为什么不直接使用malloc(sizeof())而不是这个完整的表达式呢? 问题是什么

__attribute__
??这是不是为油嘴滑舌的人保留的关键词

gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
表达式的类型是什么?它不是宏或typedef。 它是以宏作为函数名的函数吗? 谁能帮我分析一下

此处的原始链接:

您可以在此处阅读有关属性的内容:

malloc
one“告诉编译器函数类似于malloc”。
alloc\u size
用于告诉编译器函数返回值指向内存,其中大小由一个或两个函数参数给出


这一切都是为了优化编译器。这些属性不会改变函数的工作方式,它们只允许编译器产生更好的输出。

您可以在此处阅读有关属性的内容:

#define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
malloc
one“告诉编译器函数类似于malloc”。
alloc\u size
用于告诉编译器函数返回值指向内存,其中大小由一个或两个函数参数给出


这一切都是为了优化编译器。这些属性不会改变函数的工作方式,它们只允许编译器产生更好的输出。

您可以在此处阅读有关属性的内容:

#define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
malloc
one“告诉编译器函数类似于malloc”。
alloc\u size
用于告诉编译器函数返回值指向内存,其中大小由一个或两个函数参数给出


这一切都是为了优化编译器。这些属性不会改变函数的工作方式,它们只允许编译器产生更好的输出。

您可以在此处阅读有关属性的内容:

#define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
malloc
one“告诉编译器函数类似于malloc”。
alloc\u size
用于告诉编译器函数返回值指向内存,其中大小由一个或两个函数参数给出

这一切都是为了优化编译器。这些属性不会改变函数的工作方式,它们只允许编译器生成更好的输出

#define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
如果编译器是足够新的gcc,则扩展为GNU C alloc_size函数属性。该属性告诉编译器,该函数返回一个指向内存的指针,其大小由xth函数参数指定

如果编译器是gcc,则扩展为GNU C malloc function属性。将函数声明为malloc可以更好地优化函数。如果函数返回的指针保证在函数返回时不与任何其他指针别名,则函数可以具有malloc属性(实际上,这意味着新分配的内存)

如果编译器是足够新的gcc,则扩展为GNU C alloc_size函数属性。该属性告诉编译器,该函数返回一个指向内存的指针,其大小由xth函数参数指定

如果编译器是gcc,则扩展为GNU C malloc function属性。将函数声明为malloc可以更好地优化函数。如果函数返回的指针保证在函数返回时不与任何其他指针别名,则函数可以具有malloc属性(实际上,这意味着新分配的内存)

如果编译器是足够新的gcc,则扩展为GNU C alloc_size函数属性。该属性告诉编译器,该函数返回一个指向内存的指针,其大小由xth函数参数指定

如果编译器是gcc,则扩展为GNU C malloc function属性。将函数声明为malloc可以更好地优化函数。如果函数返回的指针保证在函数返回时不与任何其他指针别名,则函数可以具有malloc属性(实际上,这意味着新分配的内存)

如果编译器是足够新的gcc,则扩展为GNU C alloc_size函数属性。该属性告诉编译器,该函数返回一个指向内存的指针,其大小由xth函数参数指定

如果编译器是gcc,则扩展为GNU C malloc function属性。将函数声明为malloc可以更好地优化函数。如果函数返回的指针保证在函数返回时不与任何其他指针别名,则函数可以具有malloc属性(实际上,这意味着新分配的内存)