C语言中的栈和堆
在C语言和类似的低级语言中,内存通常被分为栈(stack)和堆(heap)。这两个区域分别用于不同类型的数据和变量。
栈上的数据:
局部变量: 在函数内部声明的变量通常存储在栈上。这些变量的生命周期与函数调用相关,当函数返回时,栈上的内存被自动释放。
函数调用信息: 当一个函数被调用时,其相关的信息(例如函数参数、返回地址、局部变量等)被存储在栈上的栈帧中。栈帧在函数调用时被压入栈,函数返回时被弹出。
程序计数器: 存储下一条要执行的指令的地址。这也通常存储在栈上。
堆上的数据:
动态分配的内存: 通过函数如 malloc、calloc、realloc 等在堆上分配的内存块存储在堆中。这些内存块的生命周期由程序员控制,需要手动释放。
全局变量和静态变量: 在程序运行时创建并保持在整个程序生命周期内的全局变量和静态变量通常存储在堆上。
动态数据结构: 堆上存储动态数据结构,例如动态数组、链表、树等。这些结构的大小和生命周期通常是动态变化的,因此使用堆上的内存更为合适。
注意事项:
栈上的内存分配和释放是由编译器和运行时系统自动管理的,而堆上的内存则由程序员负责手动管理。
栈上的 ...
移除元素
移除元素题目力扣27移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:
12345678// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝int len = removeElement(nums, val);// 在函数里修改输入数组对于调用者是可见的。// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。for (int i = 0; i < len; i++) { print(nums[i]);}
示例 1:
123输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新 ...
burp suite使用初体验
上周周末学习web时,在CTFHUB中接触到了burp suite这个具有抓包等相关功能的工具,当尝试下载这个工具时,在csdn上找到了相关的安装教程,发现竟有二十几页的操作步骤,一下就气馁了,感觉有点难办,硬是没敢尝试去安装。
而在11.20号醒来的早晨,一股莫名的冲动鼓舞着我去克服这些困难,遍按着操作步骤一步步地进行安装,经过1小时不到就成功安装,这给我了一点感悟,就是学计算机的要敢于去折腾,敢于去尝试,不要为自己去找借口,尽管可能有些时候弄了半天还是没有结果,但还是要勇于迈出第一步。
使用burp suite也是为了解决CTFHUB上的相关的CTF题目,第一感受到了抓包的奇妙之处,也体验一些其他的功能,尽管都是一些比较基本的功能,但这也是从无到有的进步,也是我在网安这方面迈出的一小步,感觉还是蛮有成就感的。
我的第一篇博客文章
第一排博客文章现在大一,记录一位coder的演变
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
