【What is IM push and iMessage group control push】¶
【What is IM push and iMessage group control push?】Device Token: The push response will include the device token for which the push message is successfully sent. This can help you determine which device received the push message.¶
The stack and some variables, but there is no separate address space between threads, and the thread has died. It is the entire process, so a multi-process program is more powerful than a multi-threaded program, but it costs money in the process. The capital is very large and the efficiency is poor. However, for some requests, you can only take advantage of concurrent manipulation of certain variables. 4. What is the difference between warehouse and overlay? Solution: For the stack, it is automatically managed by the compiler. There is no need to control it; for the heap, the release event is under the control of the programmer and it is easy to generate a MemoryLeak. Application size: Stack: Under Windows, the stack is a data structure that extends to a low address, which is a continuous memory area.
This sentence means that the address of the stack and the maximum capacity of the stack are pre-specified by the system. Under Windows, the stack size is 2M (1M for more statements), which sums up the constant size when the stack size is limited to the useful virtual memory in the computer system. It can be seen that the resulting space is flexible and it is relatively large.
static int macvlan_queue_xmit_v2(struct sk_buff skb, struct net_device dev)
{
const struct macvlan_dev *vlan = netdev_priv(dev);
const struct macvlan_port *port = vlan->port;
const struct macvlan_dev *dest;
if (vlan->mode == MACVLAN_MODE_BRIDGE) {
const struct ethhdr *eth = (void *)skb->data;
/* send to other bridge ports directly */
if (is_multicast_ether_addr(eth->h_dest)) {
struct sk_buff *nskb;
macvlan_broadcast(skb, port, dev, MACVLAN_MODE_BRIDGE);
nskb = skb_clone(skb, GFP_ATOMIC);
if (likely(nskb)) {
nskb->dev = vlan->lowerdev;
// Also inject one copy into the physical network card.
dev_forward_skb(vlan->lowerdev, nskb);
}
goto xmit_world;
}
dest = macvlan_hash_lookup(port, eth->h_dest);
if (dest && dest->mode == MACVLAN_MODE_BRIDGE) {
/* send to lowerdev first for its network taps */
dev_forward_skb(vlan->lowerdev, skb);
return NET_XMIT_SUCCESS;
}
// If the target MAC belongs to the physical network card, inject it into the host physical network card.
else /*if (!compareMacs(eth, vlan->lowerdev))*/{
struct sk_buff *nskb;
nskb = skb_clone(skb, GFP_ATOMIC);
if (likely(nskb)) {
nskb->dev = vlan->lowerdev;
dev_forward_skb(vlan->lowerdev, nskb);
}
}
}
xmit_world:
skb->dev = vlan->lowerdev;
return dev_queue_xmit(skb);
}
Fragmentation problem: For piles, frequent new/deletion will inevitably lead to discontinuous memory space, resulting in a large amount of fragmentation, which reduces program efficiency. For the stack, there is no such problem, because the stack is the first queue, it is one of them, so it will never have the memory block from the center of the stack.
Assignment: The heap is allocated dynamically, there is no dynamic allocation of the stack. There are two paradigms of allocation: static allocation and dynamic allocation. Static allocation is a compiler implementation, such as deflection variables. The AlloCA function allocates dynamic allocation, but dynamic allocation and stack stack are different. Its dynamic allocation is announced by the compiler without implementing it.
Allocation efficiency: The stack is a data structure provided by the machine system. The computer provides support in the underlying stack: it allocates the address of the stack, the stack within the stack has special instructions, and the instructions determine the efficiency of the stack. . The stack is provided by the C/C++ function library, and its mechanism is very complex. 5. Tool-c memory management? When you use the new Alloc Replication method to create an object, and the object's save count has a retention counter value of 1 and is configured for automatic release, you do not need to perform any operations to ensure that the object is destroyed. If it completes during this object's time, it is necessary to retain it and ensure that the operation completes. If you have retained objects, you need to (Ultimately) release or autorelease the objects. You must keep the number of reserved methods and usage methods.