能说会道的宏g_slice_新问题
这个问题与glibforc编程有关。 原始代码如下: 在glist.h中,我看到了宏_g_list_alloc0,我想知道它是如何实现的。所以我回过头来能说会道的宏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
#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属性(实际上,这意味着新分配的内存)