typedef struct{
void *val;
}struct_t;
void test(int val)
{
struct_t *s = malloc(sizeof(struct_t));
s->val = malloc(sizeof(int));
*(int*)&s->val = val;
free(s->val);
}
Run Code Online (Sandbox Code Playgroud)
free会产生一个sigabrt,但我认为这更像是我正在施放s-> val以使分配工作的方式的症状.执行此任务的正确方法是什么?
假设没有传递小于 4 个字节的字符串,那么这种优化有什么问题吗?是的,在比较大多数不相似的字符串时,在我测试过的机器上,这是一个显着的加速。
#define STRCMP(a, b) ( (*(int32_t*)a) == (*(int32_t*)b) && strcmp(a, b) == 0)
Run Code Online (Sandbox Code Playgroud)
假设字符串不少于 4 个字节,是否有一种更快的方法可以在不诉诸汇编等的情况下做到这一点?
我需要将定义的常量转换为它们的整数值,所以我想出了这个宏(STR_TO_CONST)来做到这一点......
#define STRFY_VAL(s) #s
#define STRFY_KEY(s) STRFY_VAL(s)
#define STR_TO_CONST(s) atoi(STRFY_KEY(s))
Run Code Online (Sandbox Code Playgroud)
它有效,但我想知道它是否有任何潜在的问题,因为我从来没有遇到过这个宏,尽管我已经搜索了类似的东西.