函数名功能函数形成参数描述skb_queue_empty检查队列是否为空int skb_queue_empty (struct sk_buff_head * list)list为队列头如果队列为空返回真,否则返回假skb_get引用缓冲区struct sk_buff * skb_get (struct sk_buff * skb)skb为要引用的缓冲区对套接字缓冲区再引用一次,返回指向缓冲区的指针            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                            精选
                                                        
                            2014-07-10 11:20:24
                            
                                2003阅读
                            
                                                                             
                 
                
                             
         
            
            
            
                  程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。函数调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构(call stack)。编译器使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文)以备恢复以及存储本地局部变量。               
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-10-10 22:27:43
                            
                                67阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            为了比较方便地分析代码的动态运行情况,有时候需要在没有发生异常的情况下打印堆栈,只需插入如下一段代码即可:Log.d(TAG, Log.getStackTraceString(new Throwable()));可见这里堆栈是通过Log.getStackTraceString(new Throwable())获取的,我们看看里面是如何实现的。public static String getStac            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-19 20:27:58
                            
                                268阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            当调用(call)一个函数时,主调函数将声明中的参数表以逆序压栈,然后将当前的代码执行指针(eip)压栈,跳转到被调函数的入口点。        进入被调函数时,函数将esp减去相应字节数获取局部变量存储空间。被调函数返回(ret)时,将esp加上相应字节数,归还栈空间,弹出主调函数压在栈中的代码执行指针(eip),跳回主调函数。再由主调            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-29 10:31:33
                            
                                145阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            函数调用大家都不陌生,调用者向被调用者传递一些参数,然后执行被调用者的代            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-09-13 12:56:04
                            
                                256阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            函数调用大家都不陌生,调用者向被调用者传递一些参数,然后执行被调用者的代码,最后被调用者向调用者返回结果,还有大家比较熟悉的一句话,就是函数调用是在栈上发生的,那么在计算机内部到底是如何实现的呢? 对于程序,编译器会对其分配一段内存,在逻辑上可以分为代码段,数据段,堆,栈 代码段:保存程序文本,指令            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-09-06 17:10:18
                            
                                863阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Linux协议栈(2)——发送流程及函数本章会一步一步的分析,在linux内核中,数据是如何从网络中接收并最后到达应用程序的。用户数据的发送流程如下图所示,不管是tfp,telnet,http都是类似的。当然我们在使用应用的时候,根本不会关注到这些加头的措施,因为要么是程序要么是内核帮助我们完成了。而我们现在所做的就是层层拨开他们去理解这协议栈的整个过程。发送过程中数据的变化如下:1.1.1.1 ...            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-08-16 22:44:23
                            
                                1085阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            程序发生异常时,将函数的调用栈打印出来,可以大大提高定位效率。Linux中提供了三个函数用来获取调用栈:/* 获取函数调用栈 */
int backtrace(void **buffer, int size);
/* 将调用栈中的函数地址转化为函数名称 并返回一个字符串数组 */
char **            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                            精选
                                                        
                            2015-06-24 14:54:26
                            
                                805阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Linux协议栈(3)——接收流程及函数本章来看下,数据是如何从网络中接收并最后到达应用程序的。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息。1.1.1.1  链路层包到达机器的物理网卡时候触发一个中断,并将通过DMA传送到位于 linux kernel 内存中的rx_ring。中断处理程序分配 skb_buff 数据结构,并将接收到的数据帧从网络适配器I/O端...            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-08-16 22:44:18
                            
                                950阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Linux操作系统中的栈是一个非常重要的概念,它在程序执行时起着至关重要的作用。栈是一种数据结构,用于存储函数调用时的局部变量、函数参数和函数返回地址。在Linux系统中,栈分为用户栈和内核栈两种形式。
对于用户态程序来说,每个线程都有自己的用户栈,用于存储函数调用时的相关信息。当一个函数被调用时,它的局部变量和参数会被存储在用户栈中。栈是一种后进先出(LIFO)的数据结构,因此函数调用时的参数            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-03-04 11:26:39
                            
                                64阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            理解调用栈最重要的两点是:栈的结构,EBP寄存器的作用。右侧的红色部分,写出了引发栈结构变化的对应的指令+| (栈底方向,高位地址) || ....................|| ....................|            // call somefun(...)-->修改esp,栈向下增长,参数入栈,返回值入栈| 参数3        || 参数2            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                            精选
                                                        
                            2013-10-01 15:39:43
                            
                                1305阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            # 实现 iOS 函数栈的完整指南
在 iOS 开发中,函数栈是一个重要的概念,它涉及程序的运行状态和函数调用的管理。如果你是一名刚入行的小白,可能会对如何实现函数栈感到困惑。在这篇文章中,我将为你提供一个逐步的流程,并详细解释每一步需要做的事情。
## 流程概览
在进行函数栈实现之前,我们首先需要明确整个开发流程。可以按照以下步骤进行:
| 步骤 | 描述            
                
         
            
            
            
            递归、栈和队列递归调用: 一个函数,调用了自身,称为递归调用递归函数: 一个会调用自身的函数称为递归函数特点: 凡是循环能干的事,递归都能干过程: 1、写出临界条件 2、找这一次和上一次的关系 3、假设当前函数已经能用,调用自身计算上一次的结果,再求出本次的结果#输入一个数(大于等于1),求1+2+3+……+n的和
#用for循环
def sum1(n):
    sum = 0
    for            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-09 19:21:40
                            
                                15阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            函数调用栈            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2016-04-05 22:52:46
                            
                                1257阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、函数原型的格式如下:[作用域][函数的链接规范]返回值类型[函数的调用规范]函数名(类型1[形参名],类型2[形参名],...)函数的参数压栈顺序与其中的  函数的调用规范  有关系,函数的调用规范就是描述参数是怎么传递的和由谁平衡堆栈的,当然还有返回值。编译出来的c/c++程式的参数压栈顺序只和编译器相关!二、函数调用约定的几种类型__stdcall,__cdecl,__            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-09-02 16:10:18
                            
                                93阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            根据不同的操作系统,一个进程可能被分配到不同的内存区域去执行。但是不管什么样的操作系统、什么样的计算机架构,进程使用的内存都可以按照功能大致分为以下4个部分:  (1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。  (2)数据区:用于存储全局变量等。  (3)堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。动态分配和回收是堆区的特点。  (            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-24 21:37:25
                            
                                141阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在项目中,我们基本上都会有个StringUtils工具类,用来处理字符串相关的操作,比如:判空,长度,脱敏等。今天有个小伙伴,因为调用别人提供的接口,接口里返回参数中有个String类型的。小伙伴判空使用的是isEmpty()方法(大多数人认为这个方式没问题)。但是问题来了:接口返回的String类型参数不是空字符串,是个" "这样的字符串。这个isEmpty方法居然返回成了false,那就是没问            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-29 18:46:51
                            
                                24阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            第一部份 Socket套接字的创建socket 并不是 TCP/IP协议的一部份。 从广义上来讲,socket 是Unix/Linux 抽像的进程间通讯的一种方法。网络 socket 通讯仅仅是其若干协议中的一类。而tcp/ip 又是网络这类中的一种。 从tcp/ip 的解度看 socket ,它更多地体现了用户 API 与协议栈的一个中间层接口层。用户通过调用socket API 将报文递交给协            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-26 14:32:19
                            
                                132阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            栈与函数调用惯例(又称调用约定)— 基础篇 记得一年半前参加百度的校招面试时,被问到函数调用惯例的问题。当时只是懂个大概,比如常见函数调用约定类型及对应的参数入栈顺序等。最近看书过程中,重新回顾了这些知识点,对整个调用栈又有了较深入的理解。作为笔记,记录于此。 NOTICE:本文笔记以32位Linu            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2016-11-03 09:45:00
                            
                                56阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在Linux内核中提供了一个可以打印出内核调用堆栈的函数 dump_stack()该函数在我们调试内核的过程中可以打印出函数调用关系,该函数可以帮助我们进行内核调试,以及让我们了解内核的调用关系。该函数头文件为:#include <asm/ptrace.h>使用方式:直接在想要查看的函数中添加dump_stack();案例:            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-04-16 10:44:29
                            
                                10000+阅读