小编Abh*_*bhi的帖子

Memcpy 实现中的优化

下面是我在搜索优化memcpy实现时得到的代码。
这是链接

void *memcpy(void *dst, void const *src, size_t len) {
    long *plDst = (long *)dst;
    long const *plSrc = (long const *)src;

    if (!(src & 0xFFFFFFFC) && !(dst & 0xFFFFFFFC)) {
        while (len >= 4) {
            *plDst++ = *plSrc++;
            len -= 4;
        }
    }

    char *pcDst = (char *)plDst;
    char const *pcDst = (char const *)plSrc;

    while (len--) {
         *pcDst++ = *pcSrc++;
    }

    return (dst);
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释下面的行吗?

if (!(src & 0xFFFFFFFC) && !(dst & 0xFFFFFFFC))
Run Code Online (Sandbox Code Playgroud)

在这里,他们想检查 …

c optimization

5
推荐指数
1
解决办法
1236
查看次数

关于解除引用'void*'指针

我无法从下面的代码行中找到如何删除上述警告.data是void指针,并且作为回调函数的一部分,将在数据指针中接收字符串.因为我有类型的void指针,但编译器仍然显示警告.

下面的线基本上有两个警告.1.取消引用'void*'指针2.获取'void类型的表达式的地址

 service_ind = atoi((const char*)&data[at_response.param[0].start_of_value_index]) ? TRUE:FALSE ;
Run Code Online (Sandbox Code Playgroud)

以下是必填信息

void * data;
AT_PARSER_RESPONSE at_response;

typedef struct
{

/*Other parameters */

AT_PARAM  param[AT_MAX_NUM_PARAM];

}AT_PARSER_RESPONSE
Run Code Online (Sandbox Code Playgroud)

c pointers void-pointers dereference

3
推荐指数
1
解决办法
625
查看次数

理解使用本地引用构建链表的逻辑

下面是使用本地参考逻辑创建链表的代码.无法理解for循环中的代码,尤其是第二行.(见// HERE)

有人可以详细说明这种逻辑是如何运作的.

void push(struct Node** head_ref, int new_data)
{
  struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
  newNode->data = new_data;

  newNode->next = *head_ref;
  *head_ref = newNode;

  return;
}


struct Node* buildWithLocalRef()
{
  int i=0;
  struct Node *head = NULL;
  struct Node **lastptrRef = &head;

  for(i=1;i<6;i++)
  {
    push(lastptrRef,i);
    lastptrRef = &((*lastptrRef)->next); // HERE
  }

  return head;
}

int main()
{
  struct Node* head;

  head = buildWithLocalRef();
  printList(head);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c linked-list

1
推荐指数
1
解决办法
75
查看次数