Track MEMORY ALLOCATIONS the Easy Way in C++

  Рет қаралды 160,230

The Cherno

The Cherno

Күн бұрын

The first 500 people who click the link will get 2 free months of Skillshare Premium: skl.sh/thechernoproject5
Patreon ► / thecherno
Instagram ► / thecherno
Twitter ► / thecherno
Discord ► thecherno.com/discord
Series Playlist ► thecherno.com/cpp
This video was sponsored by Skillshare

Пікірлер: 394
@supersquare
@supersquare 4 жыл бұрын
I'm not even joking, you're LITERALLY posting videos on problems exactly when I have them. First with singletons, then small string optimizations, and now this lmao Thank you so much for the help!
@Saje3l
@Saje3l 4 жыл бұрын
same here
@danielkrajnik3817
@danielkrajnik3817 3 жыл бұрын
survivorship bias, even though I love cherno, this is just a survivorship bias
@fallenflame8678
@fallenflame8678 Жыл бұрын
@@danielkrajnik3817 and c++ programmers always have problems with memory
@pureflame8867
@pureflame8867 4 жыл бұрын
Q&A : Got any plans or words to say about unit testing in c++?
@hpsmash77
@hpsmash77 3 жыл бұрын
"hello world is not gonna use that much memory" lets just hope that the internet doesn't take this as a challenge
@andreistefanie
@andreistefanie 4 жыл бұрын
Q&A: How experienced (as programmers) do you think most of your viewers are?
@wz5445
@wz5445 3 жыл бұрын
Cherno, thank you so much for this series, it helps me so much with understanding c++, this is exactly what I need. The majority of other channels only provide examples without really explaining what and why. Honestly man, respect. And I'm wondering if you could do some videos on design patterns and UML? I was running into it in school but didn't find the lectures very helpful lol
@foomoo1088
@foomoo1088 2 жыл бұрын
Nice and straight forward for simple scenarios. Be aware there are a few flavors of new and delete to override (arrays, etc) and also any libraries you link to may bypass your overloaded versions depending on how you build and link them
@kaihaolin1838
@kaihaolin1838 4 жыл бұрын
wow, you're still updating the cpp series in 2020.Recently I have comtinued to watch 40 videos on this series. it is awesome ,very nice!
@Nick-lx4fo
@Nick-lx4fo 3 жыл бұрын
This series is so awesome I've watched every video up to this one in a few days
@sireeshaputcha
@sireeshaputcha 4 жыл бұрын
Q&A: Firstly, thanks a lot for making these videos. You literally helped me get through my entire computer graphics course. I'm trying to become a game developer and have been following your videos on C++ and gamedev for quite a while now. What do you think can help/did help you become so good at game development? How challenging is it to work for any AAA game company? Thanks a ton!
@PrinceGupta-jo8lo
@PrinceGupta-jo8lo 4 жыл бұрын
Thanks a lot, Cherno, I was struggling a lot understanding value references and use of std::move in the codebase of MLPack, but the introduction and hint of how move semantics work really helped a lot.
@perfectionbox
@perfectionbox 4 жыл бұрын
A nice feature of POV-Ray's memory allocator is that blocks can be tagged with a string, making it easy to identify them. Breakpointing operator new or malloc is difficult when there's tons of allocations occurring.
@401281
@401281 4 жыл бұрын
I always learn something new when I watch your videos, thank you for posting these amazing resources.
@PedroOliveira-sl6nw
@PedroOliveira-sl6nw 4 жыл бұрын
Great work! Regarding the Q&A, it's not a question but I'd love to hear about (1) Vectorization and (2) Allocators [freelist, etc..].
@RakeshSolanki1
@RakeshSolanki1 Жыл бұрын
You showed it the best way. Most of the time it's easy to understand our own code than other's tool and how to use those tools. I like your grounded (stick to the basic) approach.
@atrumluminarium
@atrumluminarium 4 жыл бұрын
Q&A: Do you have any plans to cover some "tips and tricks" with regards to compute in C++? For example parallel calculations in linear algebra with openmp/opencl/cuda etc
@poolmorosanacona1930
@poolmorosanacona1930 4 жыл бұрын
Thank you! You've helped me a lot, your videos are really good, It's very easy to understand what you explain :D
@gj9ekdjekray
@gj9ekdjekray 4 жыл бұрын
Thanks a lot for making these videos!! Q&A: Looking forward to a compiling series~
@soulimanemammar2909
@soulimanemammar2909 4 жыл бұрын
It's always possible to write a memory Allocator that handle and optimize most use cases and fallback to new/delete for extreme cases...most std library function are Allocator friendly
@shaebazz1
@shaebazz1 4 жыл бұрын
Q&A: Will you be doing a series on Design Patterns (like Singletons)? What design patterns are used in game engines you work on?
@isaaclacoba4458
@isaaclacoba4458 4 жыл бұрын
Nice explanation. I like the way you use. encapsulation and Design patterns to create your own examples. Keep the good work!
@playerplayer1114
@playerplayer1114 4 жыл бұрын
Thank you so much Yan! You helped me alot to learn C++ !
@chicoern
@chicoern Жыл бұрын
F@ck, I'm new to C++ and lost count of how many times you tough me more C++ than any other forum, book, page, etc.... Awesome content, love it!
@andre_4046
@andre_4046 2 жыл бұрын
This actually helped me big time. Big thanks Cherno!
@davidrees1452
@davidrees1452 4 жыл бұрын
Q&A: Do you plan on continuing the expansion of the C++ playlist with more "beginner" tutorials? Such as creating videos about subjects you would possibly cover in a later videos. I am interested in your take on lvalues & rvalues, design patterns, best practices for beginners, how to use threads in your program, etc.
@seditt5146
@seditt5146 4 жыл бұрын
For a Q&A I always wanted to know if your Game Engines, Sparky and Hazel are indicative of the sort of Engines you worked on in your professional work. Did they use far more complex and optimized code or does your work reflect what you seen in your time in the industry?
@brunooliveirasoares7489
@brunooliveirasoares7489 4 жыл бұрын
Great video, as always! You could make a live with the Q&A... that would be interesting! Q&A: Which literature do you recommend regarding the very bases of computer science, like process, threads, algorithms... ?
@newoap
@newoap 4 жыл бұрын
Great stuff as always. Surprised you haven't done move semantics and perfect forwarding so that's my request.
@simeonlazarov5643
@simeonlazarov5643 4 жыл бұрын
Q&A: My idea is to show off anything that you use in visual studio (mainly). Maybe 2-3 video and by anything I mean keybinds, tools and so on, everything that help us to write fast and good code. Thank you for the best C++ tutorials on the internet, they are as simple as possible and show anything you need to know just to start writing code.
@QckSGaming
@QckSGaming 4 жыл бұрын
Excellent video as always! Keep on doing this stuff, I couldn't get through uni without you lmao Question arises though: How does it effect performance (especially game engine with many allocations) if you write a bit more code in the overloads? Should you create a separate reference counter class in that case that would do the things for you, like call new etc. without actually overloading the standard functionality?
@glennstormdesign
@glennstormdesign 3 жыл бұрын
LOL, _of course_ you continued to show me what I needed, even whilst I dropped off the earth. Thx; I’ll be able to pick things right back up. :)
@alitabrizi9811
@alitabrizi9811 4 жыл бұрын
Hey. always loved your videos. Any plans on doing some videos on memory leaks and tools for monitoring them???
@felipecarlin8540
@felipecarlin8540 4 жыл бұрын
More of a personal question, when did your interest in game engine development start? I think this is intriguing, because my interest in it started because of your channel. Thanks for the amazing content!
@nikorasub1410
@nikorasub1410 4 жыл бұрын
Thanks for you great tutorial , I think your tutorial in more focus on "advanced" C++ topic is a great idea.. when I make interview for jobs, they mainly focus on memory part and not "how do you write this" etc etc Q&A : Do you plan to make video about video game C++ technique use in industry (like managing memory for actor with cache, or display a tons of object by example) ? Please continue your great works !
@dojo2029
@dojo2029 Жыл бұрын
Great, thank you for sharing your knowledge and experience!
@matthewpeterson5159
@matthewpeterson5159 4 жыл бұрын
oml that keyboard tho :P glad to see you're still uploading after what feels like years lol
@iamagenius2646
@iamagenius2646 4 жыл бұрын
Q&A : can you make a video on client side prediction ? And networking in general
@aliberro
@aliberro 4 жыл бұрын
At 0:56 you won't write an app that uses alot of memory Google Chrome Devs: Ohh challenge accepted!
@zuhail339
@zuhail339 4 жыл бұрын
Tysm for being so consistent with c++ .
@vijaypatil873
@vijaypatil873 4 жыл бұрын
Q&A : Do you plan on starting your own startup in near future?
@tonholis
@tonholis 3 жыл бұрын
That helps a lot! Thanks. Is there any video about best practices dealing with large amounts of data (like images)?
@aquavitale3551
@aquavitale3551 4 жыл бұрын
Thanks for doing great series! How much time do you spend on working on a typical video, at average?
@user-cc8kb
@user-cc8kb 4 жыл бұрын
super useful! thank you
@konstantinrebrov675
@konstantinrebrov675 4 жыл бұрын
Q&A: What are your opinions about programming languages like Rust and Go vs C++? Can you make some videos about low level system programming in Windows? I know the Linux system calls, but I want to transition to Windows. Have you ever used Microsoft's Managed C++, and can you make a video about it? What are your favorite APIs for C and C++? What should a "good programmer" know about C and C++ in order to get a job? How many hours each week do you devote to researching about programming, and how do you keep track of all the other tasks you have to do?
@psyience3213
@psyience3213 Жыл бұрын
That’s pretty cool. I wrote my own smart pointer class that handles memory allocation deallocation, I should add something to it that tracks total memory usage
@parthlodhia5552
@parthlodhia5552 4 жыл бұрын
Nice bro, keep on Really help full.
@littleclouds1
@littleclouds1 4 жыл бұрын
Q&A: It would be nice if you could give an example of when to use Batch Rendering and Instanced Rendering with the pros and cons. PS: Really looking forward to seeing more of the new office :)
@Ethan-dm2yz
@Ethan-dm2yz 4 жыл бұрын
beg you to make such more videos on "working memory and the C++ programming syntax interrelation". It really makes "sense" for writing absolute and optimized programm. PLEASE.PLEASE.PLEASE......
@alextiga8166
@alextiga8166 4 жыл бұрын
Would be nice to mention that this example wouldn't call the constructor like the original "new" operator(same applies to destructor call with the "delete" operator) so the beginners won't wonder why doesn't their code work after they overwrite the "new" and "delete" operators.
@Ghasakable
@Ghasakable 5 ай бұрын
The implementation of the de-allocation is based on which complier you are using, for clang++ you can pass the flag -fsized-deallocation as it is not implemented yet for GNU GCC g++ its supported by default
@mang0men1
@mang0men1 4 жыл бұрын
Can you recommend a book or some steps on how to optimize an algorithm in general. What is your general aproach ?
@yayayayayayayayayay693
@yayayayayayayayayay693 4 жыл бұрын
The delete operator with size parameter is never called for me, when using gcc or clang. Neither in debug nor release optimization. And it seems it is basically not really supported officialy, the compiler just chooses the non-size-parameter version anytime it wants to.
@Yupppi
@Yupppi 9 ай бұрын
This felt super useful. I learned that just a very simple program of 230 lines, that takes a couple of decimal measurements of a part and calculates a standard deviation based quality key numbers and prints them out wouldn't have fit in like a manufacturing industry machine memory a decade or couple ago. Heck, almost 600 kb for that? To calculate and print out 3 numbers from 8 numbers. We live in the age of luxury. Honestly most automation logic codes inside PLC units are smaller I'm pretty sure.
@bpeachey1475
@bpeachey1475 4 жыл бұрын
Hi, great videos BTW! What's the hot keys for moving and entire line of code up or down???
@SuperCiao000
@SuperCiao000 2 жыл бұрын
thank you so much, this is a really useful trick. You are the best
@quaintbear
@quaintbear 4 жыл бұрын
Спасибо за видосы! Узнаю больше чем от препдов.
@mateuszbahyrycz7003
@mateuszbahyrycz7003 4 жыл бұрын
Great video Cherno !
@svenbtb
@svenbtb Жыл бұрын
this is so simple but really smart, I'll totally have to remember this
@XxxGuitarMadnessxxX
@XxxGuitarMadnessxxX 2 жыл бұрын
I'm quite happy to have found this video in google search lol I'm messing around with color tagging in a current project and by using your method here, I noticed that one implementation of a certain function allocates almost 40 times less (a bunch of small allocations with mapping and strings) going from 1936 bytes to 56 bytes compared to the original function I wrote by instead using constexpr const char* for color codes , using string_views, and eliminating the table lookups in the form of the mapping that was taking place. Seriously, thank you for this video! It's useful tips and tricks like these that make me excited to keep on learning =D EDIT: Just watched your small string optimization vid after this one and realized i could just use const std::string instead of constexpr const char* (probs should've been using const char* const instead of constexpr const char* anyways if i'm being honest.. woops lol). I'll say it again until I'm blue in the face - thank you for these videos!!
@rockwellldreamn5843
@rockwellldreamn5843 3 жыл бұрын
Very cool video! Thank you!
@angucbac2655
@angucbac2655 4 жыл бұрын
Could you make a tutorial about callback in c++? Thank for your sharing
@rufusli7056
@rufusli7056 4 жыл бұрын
You can also use compilers to help you by compiling C++ code with address sanitizer and leak sanitizer flags.
@nfrancisj2122
@nfrancisj2122 4 жыл бұрын
A request! if you're taking requests. It would be super awesome if you could do a Math : Games Edition series...or vlog. Just a talk about what kinda math is helpful/required for engine development. Thx!
@colinmaharaj
@colinmaharaj 4 жыл бұрын
I still use new/delete and new[]/delete[]. Many years ago I wrote a new/delete scanner to find new's' and look for the corresponding delete's'. If it could not find the delete the app would give an error.
@user-tz5bz4cz9q
@user-tz5bz4cz9q 3 жыл бұрын
Thank's the Cherno! Cool video tutorial!
@arielspalter7425
@arielspalter7425 4 жыл бұрын
Amazingly useful.
@tonghaoyuan
@tonghaoyuan 3 жыл бұрын
If you use clang you may want to override both void operator delete(void* ptr) noexcept{} and void operator delete(void* ptr, size_t size) noexcept{}
@brunodelafontaine1637
@brunodelafontaine1637 4 жыл бұрын
Your videos are amazing man. Great explanation. Any book recommendations for c/c++ for embedded software? Also have you ever done embedded software?
@harrirahikainen4196
@harrirahikainen4196 4 жыл бұрын
I would also appreciate more performance related stuff as I would like to transition to C++ from C in my company. Although game development is closer to embedded than most fields you see represented in KZfaq for example
@EmbeddedSorcery
@EmbeddedSorcery 4 жыл бұрын
This might really be useful in an embedded environment.... however, how might I try it if we already override new for class constructors in order to force static allocation of those classes? (like a Hardware class that there only ever needs to be one of)
@FatherOfTheParty
@FatherOfTheParty 4 жыл бұрын
Very nice treatment of interposition from the language level.
@BOTHLine
@BOTHLine 3 жыл бұрын
2 short questions: Are there some situations in std where the "new" keyword is not used, but malloc() is called directly? Such a case you wouldn't detect by overriding the new operator? When freeing the memory and only passing a void*, how does the system know how much memory to free?
@tcholly
@tcholly 4 жыл бұрын
you can explain all in a good way, you have a mechanical keyboard, you only need a static sound from the microphone and an indian accent and you're perfect
@2wheels2
@2wheels2 4 жыл бұрын
what companies or job types would require c++, a job type being desktop programmer or database management.
@K9Megahertz
@K9Megahertz Жыл бұрын
Paul Nettle wrote a memory manager many years ago that overwrote new/delete/malloc/free/etc... and tracked all the memory allocations and printed out a nice report of unfree'd memory among other stats at the end of program termination. I think you can still find it online. It was a header file you had to include with every sourcefile you wanted to track. It worked really well, at least for single threaded applications. It didn't play nice with multithreaded code but maybe that could be fixed. I tried many years ago but my Kung Fu wasn't all that good at the time. I might be able to make better sense of it now. Ehh, maybe something I'll revisit at some point.
@Xxp0r
@Xxp0r 4 жыл бұрын
When will you do a C++ Video on Exception handling, and why you don't use it?
@ekremdincel1505
@ekremdincel1505 4 жыл бұрын
@Ricardo Santos lol "goto is harmful" cant be a reason for this. Dont use loops if you dont want "goto"s in your compiled program. Exception handling is useful, just do it right.
@dominicrodriguez7413
@dominicrodriguez7413 4 жыл бұрын
It would be great to hear about how you learned advanced level programming - not how you started but how you developed the skills to work on highly technical projects like game engines
@leZigoute
@leZigoute 4 жыл бұрын
Being curious is the answer. Incremental learning. Don't try to learn everything at once but build your skill one step at a time.
@TonySheog
@TonySheog 4 жыл бұрын
Q&A: How can someone get into game engine development? Is it possible to become a game engine developer without gamedev industry experience (just being good at c++)? It feels like 95% of all gamedev jobs today are in Unity so you have to code in c# and not get any experience in c++
@zhuping1506
@zhuping1506 4 жыл бұрын
Would you please make a video about multi-threading in c++?
@Chris-xn9zm
@Chris-xn9zm 4 жыл бұрын
Q&A: Where/how do you get information regarding topics such as this one?
@eddyecko94
@eddyecko94 4 жыл бұрын
Chris I think working with other great developers excite your curiosity too, there are some things you wouldn’t even bother looking into unless your livelihood depends on it.
@DoubleCoolOp
@DoubleCoolOp 3 жыл бұрын
How to overload delete[] for arrays to show memory freed ?
@gamingtech276
@gamingtech276 4 жыл бұрын
What's your stand when it comes to mixing underscore and camel case?
@juliancruz1927
@juliancruz1927 4 жыл бұрын
200k followers because you're a great teacher. Can you do some advance videos about ComputeShaders and also some about debugging CPU and GPU series? Pls!!! :)
@DrGreenGiant
@DrGreenGiant 4 жыл бұрын
Q&A please can you explain virtual inheritance?
@roxferesr
@roxferesr 3 жыл бұрын
This is not working for me unfortunately, the delete(void* memory) method gets called sometimes, instead of delete(void* memory, size_t size). When that happens the memoryAllocated - memoryFreed count is off
@neilbroomfield3080
@neilbroomfield3080 4 жыл бұрын
Are there any issues with multi-threading and not using atomic variables/functions to manipulated your metrics?
@rafalmichalski4893
@rafalmichalski4893 4 жыл бұрын
Hello Cherno. Does delete operator taking size params work with built-in types like int ? If not how to count freeing it from heap ?
@mrbisht8638
@mrbisht8638 4 жыл бұрын
A video on ways to detect or debug memory leaks will be really really beneficial ?
@syc52
@syc52 3 жыл бұрын
Why overloading operator new does not give a function redefine error? I noticed that in header, there is already such a function defined.
@dehufters
@dehufters 4 жыл бұрын
is there a version of this vid without the screaming background noise (or is it my MacBookPro)?
@techdiver6074
@techdiver6074 3 жыл бұрын
I'm writing audio software. DAWs are unpredictable. This is going to come in handy immediately!
@muhammadtaimourafzal5285
@muhammadtaimourafzal5285 3 жыл бұрын
that was amazing
@abbudeh
@abbudeh 4 жыл бұрын
how did your 'new' and 'delete' functions get the size parameter just by typing "new Object"/"delete Object"? Thanks.
@AbdullahGameDev
@AbdullahGameDev 3 жыл бұрын
because when you write a new, what actually happened here you allocate memory on the heap for all variable x,y,z that take 12 bytes then new function return address for this block and now you can guess what about delete? maybe this help you.
@tameryldrgan552
@tameryldrgan552 Жыл бұрын
Question: Using new operator automatically triger consruction method of class. You override it and use malloc inside it. Does it run constructor automatically and how?
@rikseth9606
@rikseth9606 4 жыл бұрын
What I am most curious about to know in the Q/A is what did you work on at EA?
@sevcandincel
@sevcandincel 4 жыл бұрын
One of the most optimized mobile game engines. You can watch first videos of his C++ series, he was mentioning that there.
@popcultureprogrammer2171
@popcultureprogrammer2171 Жыл бұрын
wooow this is pretty freaking cool
@masheroz
@masheroz 3 жыл бұрын
How does just adding a second parameter to your own delete function grab the size?
@sevakantonyan9833
@sevakantonyan9833 4 жыл бұрын
Does anyone knows if constructor can be called explicitly.
4 жыл бұрын
I think we need memory and thread checking option at complier. Is there any library or anything to track memory and thread automatically without shared pointers? Using shared pointers overhead in my head. Unreal manage all c++/blueprint with some own library. If you just use unreal library, there is no problem. There is bunch of GC options at editor.
@yulyalesheva98
@yulyalesheva98 4 жыл бұрын
Hey, Yan, can you recommend the books for game developer, who knows how to make simple games, but wants to learn more about optimization and lunching it's own game. Thanks
@indradb7377
@indradb7377 4 жыл бұрын
Game design patterns, the book is free on the website of the author
@poolmorosanacona1930
@poolmorosanacona1930 4 жыл бұрын
You read my mind! I was going to ask about books for learning C++
@yulyalesheva98
@yulyalesheva98 4 жыл бұрын
@@poolmorosanacona1930 are you begginer? I can recommend you some resources if you need it. Cuz I have learning c++ from scratch for a year and I have a good results (I got an internship in gamedev company and it's starting in a month). So let me know
@sriramiyer9840
@sriramiyer9840 4 жыл бұрын
@@yulyalesheva98 I know the basics of c++(took the subject in high school) but don't know how to exactly take it to the next level like creating games and stuff. Do you know any good resources for that? Thanks.
@yulyalesheva98
@yulyalesheva98 4 жыл бұрын
@@sriramiyer9840 sure! I reccomend you to look at Cocos2d-x (3rd version, not the newest 4, cuz it's harder to install without guide). Cocos2d-x it's a game engine that has a lot of guides and the big community. After installing, you should look at official guide (documentation) on their website and try to implement the features from the guide. (Like create sprite and move it, or make your sprite into a physical object). After you've learned that stuff, you will be able to make your own mini simple game. I promise you.
@rupin4004
@rupin4004 4 жыл бұрын
Q&A : hey. So I've learnt c++ for 2 yrs in high school but, but but it was on 'turbo c' compiler which is like very much isolated from rest or the galaxy and even though I am fairly intermediate level programer in turbo c but I really can't understand anything done outside this compiler ( ican but you know what I mean??) , PLEASE make a video on how to get out of that compiler and what actually I can do with other ones which turbo c can't do🙂
@breeze2440
@breeze2440 4 жыл бұрын
Bro i was used to turbo c too cuz that's the only thing on I got taught in school.. but I have recently installed vs and started cherno series,it's too easy... It's been week and now I am out of that turbo shit and the environment in vs feels much more comfortable ♥️
@rupin4004
@rupin4004 4 жыл бұрын
@@breeze2440 thankyou for your response, and yes I have also installed vs and codeblocks and I'm now practiceing on them .😊
@raiyanreza9764
@raiyanreza9764 3 жыл бұрын
I am having problems getting the size on the delete operator, if I remove "sizr_t" from the function parameter then the delete overloaded delete operator works.
@Slokingseba
@Slokingseba 4 жыл бұрын
When defining Void Operator Delete, my program sais: "Function previously declared with an explicit exception specification redeclared with an implicit exception specification". Is this something to be expected?
lvalues and rvalues in C++
14:13
The Cherno
Рет қаралды 309 М.
Stack vs Heap Memory in C++
19:31
The Cherno
Рет қаралды 560 М.
Secret Experiment Toothpaste Pt.4 😱 #shorts
00:35
Mr DegrEE
Рет қаралды 38 МЛН
Я обещал подарить ему самокат!
01:00
Vlad Samokatchik
Рет қаралды 9 МЛН
Jumping off balcony pulls her tooth! 🫣🦷
01:00
Justin Flom
Рет қаралды 28 МЛН
Every Developer Should Know This
15:38
ArjanCodes
Рет қаралды 24 М.
Arenas, strings and Scuffed Templates in C
12:28
VoxelRifts
Рет қаралды 81 М.
BINARY vs TEXT File Serialization
13:49
The Cherno
Рет қаралды 49 М.
ITERATORS in C++
17:09
The Cherno
Рет қаралды 204 М.
All about MEMORY // Code Review
33:42
The Cherno
Рет қаралды 161 М.
are "smart pointers" actually smart?
9:44
Low Level Learning
Рет қаралды 73 М.
Pointers and dynamic memory - stack vs heap
17:26
mycodeschool
Рет қаралды 1,4 МЛН
What is virtual memory? - Gary explains
11:28
Android Authority
Рет қаралды 300 М.
Secret Experiment Toothpaste Pt.4 😱 #shorts
00:35
Mr DegrEE
Рет қаралды 38 МЛН