> First, how big is the data member of the object ? As I said before. Capacity is the size of the memory allocated that data points at.
> Is it as big as the actual array buffer length which I declare on JavaScript It will be either as big, or bigger. It can grow. bytes_used will be the size that matches javascript. > which I can build on top of it a typedarray ? This is a slightly different question, (and needs clarifying) When you create a typedarray in C++, it needs an array buffer. When you create a typedarray in javascript, it will have an array buffer behind it. (which you may or may not have created in javascript or c++, there are several ways of approaching this) > So, when a typedarray is build on top of an areaybuffer instance, how do I get to call the arraybufferbuilder::append ? Aha! a more specific question! Are you trying to call arraybufferbuilder::append in javascript, or c++? Why? are you trying to make a typedarray bigger? (in javascript or c++?) I believe once created they're a fixed size in javascript. I have a feeling on the c++ side, you can't change the size once created (but I may be wrong, you have direct access to the buffer's buffercontents via the bufferview...) Can you make your question a lot more specific? post some code? On Monday, 10 September 2018 22:38:16 UTC+1, dan Med wrote: > > First, how big is the data member of the object ? Is it as big as the > actual array buffer length which I declare on JavaScript and which I can > build on top of it a typedarray ? > > No, I’m just trying to understand how v8 works, I know it is a big thing > but at least how it moves then I might read the code and understand, extra > parts. > > So, when a typedarray is build on top of an areaybuffer instance, how do I > get to call the arraybufferbuilder::append ? > > > > > > On Mon, 10 Sep 2018 at 23:30, @soylentgraham <gra...@grahamreeves.com > <javascript:>> wrote: > >> I'm guessing you may be a bit new to unmanaged-memory languages/systems. >> >> buffer is an object, (it's structure/layout will look a bit like it's >> class declaration, but it's a little more complex than that) that was >> allocated somewhere sometime, (you can figure out where, but really you >> don't need to, for this purpose it's just an object) >> data is a member of that object, that points to some memory (somewhere >> else, maybe allocated by a different system, in a different place) >> you have no idea (and you shouldn't need to know, or use the information) >> the "offset" from the buffer-object to the data. They are not necessarily >> related, or share the same memory space. (and in most cases, they're not >> even real memory addresses, they're more like identifiers) >> >> Simple Javascript scripts can look like C sometimes (a few variables here >> and there, a few array creations), but underneath it's doing a lot more >> moving things around. >> function x() >> { >> var a = new array(10); >> var b = new array(100); >> } >> This may look like it allocates 2 arrays, but more than likely it's doing >> something radically different with actual memory. >> >> >> > so how can i see the memory management ? >> As I said, you can't see the javascript side so easily (other than using >> the v8 debugging/inspector tools) >> But if you want to see the C-side memory (which MAY be where the data >> that buffer points at came from) you can make your own allocator that v8 >> can use. >> If you then breakpoint each call, you'll know when V8 is allocating some >> memory to use (which may or may not be a direct object in javascript, an >> array or typed array in javascript may not directly allocate here) >> >> >> class TV8Allocator : public v8::ArrayBuffer::Allocator >> >> { >> >> public: >> >> virtual void* Allocate(size_t length) override; >> >> virtual void* AllocateUninitialized(size_t length) override; >> >> virtual void Free(void* data, size_t length) override; >> >> }; >> >> >> void* TV8Allocator::Allocate(size_t length) >> >> { >> >> auto* Bytes = new uint8_t[length]; >> >> for ( auto i=0; i<length; i++ ) >> >> Bytes[i] = 0; >> >> return Bytes; >> >> } >> >> >> void* TV8Allocator::AllocateUninitialized(size_t length) >> >> { >> >> auto* Bytes = new uint8_t[length]; >> >> return Bytes; >> >> } >> >> >> void TV8Allocator::Free(void* data, size_t length) >> >> { >> >> auto* data8 = reinterpret_cast<uint8_t*>(data); >> >> delete[] data8; >> >> } >> >> v8::Isolate::CreateParams create_params; >> >> create_params.array_buffer_allocator = &mAllocator; >> >> >> >> > Cause i saw the code but didn't find how it handles all the possible >> javascript i might write into a script file.... >> >> >> Your computer most likely has more memory than you'll ever write in a >> script :) >> >> If you're trying to work out where your script goes... arraybuffer isn't >> the right place. >> >> >> Do you NEED to know? What exactly are you trying to achieve? (take a >> step back from the code and describe what you're trying to do; >> >> are you trying to make an app? learn how memory works in c++? learn how >> memory is used in javascript? Why your app uses 1gb of memory? >> >> >> >> >> On Monday, 10 September 2018 22:10:54 UTC+1, dan Med wrote: >>> >>> How big is the offset from buffer to data ? >>> const void* Data >>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=80&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523b8F1aEDx%25252F6En%25252FkOKh2zVkvONjtDNg9gr5KG7gT9XeJk%25253D&gsn=Data&ct=xref_usages>() >>> >>> const { return buffer_ >>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=94&ct=xref_jump_to_def&gsn=buffer_> >>> -> >>> <https://cs.chromium.org/chromium/src/base/memory/scoped_refptr.h?l=218&ct=xref_jump_to_def&gsn=-%3E> >>> Data >>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer.h?l=225&ct=xref_jump_to_def&gsn=Data>(); >>> >>> } >>> >>> sorry for spamming emails, i will try to condensate more >>> >>> Il giorno lun 10 set 2018 alle ore 23:07 dan Med <litoki...@gmail.com> >>> ha scritto: >>> >>>> Cause i saw the code but didn't find how it handles all the possible >>>> javascript i might write into a script file.... >>>> >>>> Il giorno lun 10 set 2018 alle ore 23:06 dan Med <litoki...@gmail.com> >>>> ha scritto: >>>> >>>>> But after using it for a little while, I have found v8 in general is >>>>> pretty simple. It provides an interface to C functions and memory. This >>>>> is >>>>> kinda what it's for. >>>>> >>>>> so how can i see the memory management ? >>>>> >>>>> >>>>> Il giorno lun 10 set 2018 alle ore 23:06 dan Med <litoki...@gmail.com> >>>>> ha scritto: >>>>> >>>>>> So, the hole length of this raw memory is set to be Data ? And to use >>>>>> it i should create a view on top of it like with typedarrays? >>>>>> >>>>>> >>>>>> So to call arraybuffer::append i should first, try to make the typed >>>>>> array bigger that action will call the arraybuffer::append ? i didn't >>>>>> ask >>>>>> how memcpy work, i didn't get the Data() thing, in the class that's all. >>>>>> >>>>>> Il giorno lun 10 set 2018 alle ore 22:55 @soylentgraham < >>>>>> gra...@grahamreeves.com> ha scritto: >>>>>> >>>>>>> > How can i understand the structure in memory of an arraybuffer and >>>>>>> > how big is the data field which is pointed by this void pointerIt has >>>>>>> > no structure. It is just a series of linear bytes, raw memory, >>>>>>> > allocated by the memory allocator. (If you implement your own memory >>>>>>> > allocator you can catch when this happens)It's just the data(buffer) >>>>>>> > for an array. >>>>>>> > How are they represented in memory....It IS memory. It's nothing more >>>>>>> > (it's an array of bytes) >>>>>>> > How big is the data field ?If by "field", you mean, the data >>>>>>> > buffer... it's Capacity >>>>>>> > <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=76&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523kB%25252BJ1WxDvoDqf1c8Tz5Ol3yne4lD03cRpevK2LHMUZk%25253D&gsn=Capacity&ct=xref_usages> >>>>>>> > (capacity is how much it can fit) in length. But not how much is >>>>>>> > being used. (bytes_used) >>>>>>> If you're curious about when memory grows, reallocates, is written to, >>>>>>> accessed... it might be worth setting up your environment so you can >>>>>>> debug it by stepping through the code as it executes. You can watch >>>>>>> memory, (this would show what memcpy changes) see the values passed >>>>>>> around, track when memory gets allocated etc. >>>>>>> Your questions are a mix of very broad, ("How does v8 work") and very >>>>>>> specific programming questions (what is memcpy() doing)Broad questions >>>>>>> are very hard to answer in general. ("How does a car work") >>>>>>> >>>>>>> I agree, simply browsing the code doesn't give a good overview of say, >>>>>>> how the javascript compiler works, or how memory is utilised. (How it >>>>>>> is allocated is very simple, on the C/++ side it doesn't implement any >>>>>>> memory management, and the array buffer/view is a view of the C-side >>>>>>> memory)But after using it for a little while, I have found v8 in >>>>>>> general is pretty simple. It provides an interface to C functions and >>>>>>> memory. This is kinda what it's for. >>>>>>> But the point of v8 is that it does a lot of that for you. I don't >>>>>>> REALLY need to know how the memory is tracked on the javascript side, >>>>>>> it just works (if I'm using the API correctly)Then again, if you NEED >>>>>>> to know how it works for a specific purpose (very restricted memory, >>>>>>> fixing a bug), we can help you a lot more easily by answering a very >>>>>>> specific question. ("My car's low-oil light is blinking, where do I >>>>>>> fill it up") >>>>>>> If you're just curious as to how the entire v8 engine works... that's a >>>>>>> massive ask. A lot of people work on it, and there is a lot of work and >>>>>>> topics involved.Your best bet is reading the (limited) documentation on >>>>>>> the wiki, and read the blog posts https://v8project.blogspot.com/ which >>>>>>> go into quite a lot of detail on each post topic.I've not seen any real >>>>>>> general overview (the wiki itself says it's out of date) so, stepping >>>>>>> through all the code as it executes is probably your best bet. >>>>>>> >>>>>>> >>>>>>> On Monday, 10 September 2018 21:25:37 UTC+1, dan Med wrote: >>>>>>>> >>>>>>>> in this snippet for example >>>>>>>> >>>>>>>> namespace WTF >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=40&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%2523WTF%252523n%252523namespace&gsn=WTF&ct=xref_usages> >>>>>>>> {// A utility class to build an ArrayBuffer instance. Validity must >>>>>>>> be checked// by isValid() before using an instance.class WTF_EXPORT >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/wtf_export.h?l=46&ct=xref_jump_to_def&gsn=WTF_EXPORT> >>>>>>>> ArrayBufferBuilder >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=44&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523ArrayBufferBuilder%25253AWTF%252523c%252523hTnYOn1mFcU%2Bkythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523NyhHD05MjDx8XOe1m%25252BLqXBLvqdjWPsLmDrRvvmR2Ywk%25253D&gsn=ArrayBufferBuilder&ct=xref_usages> >>>>>>>> final { // Disallow copying since it's expensive and we don't want >>>>>>>> code to do it by // accident. USING_FAST_MALLOC >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/allocator.h?l=146&ct=xref_jump_to_def&gsn=USING_FAST_MALLOC>(ArrayBufferBuilder >>>>>>>> >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=44&ct=xref_jump_to_def&gsn=ArrayBufferBuilder>); >>>>>>>> public: // Creates an ArrayBufferBuilder using the default capacity. >>>>>>>> ArrayBufferBuilder >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=51&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523me5JBk4wDIaIJCK86MiUpy%25252BnGYRZwEr0AvVg3KaU0pw%25253D&gsn=ArrayBufferBuilder&ct=xref_usages>(); >>>>>>>> ArrayBufferBuilder >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=53&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523VW0P45Tk9IGjtOqM%25252B9dHdJ64so3WDAfcY1jNBLt0GNY%25253D&gsn=ArrayBufferBuilder&ct=xref_usages>(unsigned >>>>>>>> capacity >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=53&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523trfcCH7BPCRWiubGq1QF9bypkCRNYtWGHb2AzglMces%25253D&gsn=capacity&ct=xref_usages>) >>>>>>>> : bytes_used_ >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=92&ct=xref_jump_to_def&gsn=bytes_used_>(0), >>>>>>>> variable_capacity_ >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=93&ct=xref_jump_to_def&gsn=variable_capacity_>(true) >>>>>>>> { buffer_ >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=94&ct=xref_jump_to_def&gsn=buffer_> >>>>>>>> = >>>>>>>> <https://cs.chromium.org/chromium/src/base/memory/scoped_refptr.h?l=226&ct=xref_jump_to_def&gsn=%3D> >>>>>>>> ArrayBuffer >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer.h?l=42&ct=xref_jump_to_def&gsn=ArrayBuffer>::Create >>>>>>>> >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer.h?l=125&ct=xref_jump_to_def&gsn=Create>(capacity >>>>>>>> >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=53&ct=xref_jump_to_def&gsn=capacity>, >>>>>>>> 1); } bool IsValid >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=58&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523Bx72YH%25252BiA4nF5ZIPsFhA9MQpdVCDOCRHSZa0Ksg6Wp4%25253D&gsn=IsValid&ct=xref_usages>() >>>>>>>> const { return buffer_ >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=94&ct=xref_jump_to_def&gsn=buffer_>.get >>>>>>>> >>>>>>>> <https://cs.chromium.org/chromium/src/base/memory/scoped_refptr.h?l=211&ct=xref_jump_to_def&gsn=get>(); >>>>>>>> } // Appending empty data is not allowed. unsigned Append >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=61&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523BHKR8BlIFhr03faCJF5mu7RDXZ%25252FPtZDAlnACyKmv1XM%25253D&gsn=Append&ct=xref_usages>(const >>>>>>>> char* data >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=61&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%25233VvJP%25252BUI3abzouA4%25252FYSBHt09pw3AiNI9e9QAJGooqYI%25253D&gsn=data&ct=xref_usages>, >>>>>>>> unsigned length >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=61&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523xOZXOK9mCrzsbUtqCxdbDuLg939IJhl7gbf0EykKwnY%25253D&gsn=length&ct=xref_usages>); >>>>>>>> // Returns the accumulated data as an ArrayBuffer instance. If >>>>>>>> needed, // creates a new ArrayBuffer instance and copies contents >>>>>>>> from the internal // buffer to it. Otherwise, returns a RefPtr >>>>>>>> pointing to the internal // buffer. scoped_refptr >>>>>>>> <https://cs.chromium.org/chromium/src/base/memory/scoped_refptr.h?l=167&ct=xref_jump_to_def&gsn=scoped_refptr><ArrayBuffer >>>>>>>> >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer.h?l=42&ct=xref_jump_to_def&gsn=ArrayBuffer>> >>>>>>>> ToArrayBuffer >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=67&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523JX559OA9Zt0rALNU4DOTOkzcmtws4U5V42xhN0rrbow%25253D&gsn=ToArrayBuffer&ct=xref_usages>(); >>>>>>>> // Converts the accumulated data into a String using the default >>>>>>>> encoding. String >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/text/wtf_string.h?l=64&ct=xref_jump_to_def&gsn=String> >>>>>>>> ToString >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=70&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523VMCyw7t%25252FF0UIo65pz8LTbfX5k5G4pIXrUNQbDNKDjaE%25253D&gsn=ToString&ct=xref_usages>(); >>>>>>>> // Number of bytes currently accumulated. unsigned ByteLength >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=73&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523P5Klo%25252BJeJiug%25252FrSAfsaHI8wAnW8h5UBg2%25252BoJByO85kA%25253D&gsn=ByteLength&ct=xref_usages>() >>>>>>>> const { return bytes_used_ >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=92&ct=xref_jump_to_def&gsn=bytes_used_>; >>>>>>>> } // Number of bytes allocated. unsigned Capacity >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=76&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523kB%25252BJ1WxDvoDqf1c8Tz5Ol3yne4lD03cRpevK2LHMUZk%25253D&gsn=Capacity&ct=xref_usages>() >>>>>>>> const { return buffer_ >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=94&ct=xref_jump_to_def&gsn=buffer_>-> >>>>>>>> >>>>>>>> <https://cs.chromium.org/chromium/src/base/memory/scoped_refptr.h?l=218&ct=xref_jump_to_def&gsn=-%3E>ByteLength >>>>>>>> >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer.h?l=249&ct=xref_jump_to_def&gsn=ByteLength>(); >>>>>>>> } void ShrinkToFit >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=78&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523WBvAUuWtgva6ffSXIiEGEkt%25252FFFbeCcQcsCz5E%25252FHCKOo%25253D&gsn=ShrinkToFit&ct=xref_usages>(); >>>>>>>> const void* Data >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=80&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523b8F1aEDx%25252F6En%25252FkOKh2zVkvONjtDNg9gr5KG7gT9XeJk%25253D&gsn=Data&ct=xref_usages>() >>>>>>>> const { return buffer_ >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=94&ct=xref_jump_to_def&gsn=buffer_>-> >>>>>>>> >>>>>>>> <https://cs.chromium.org/chromium/src/base/memory/scoped_refptr.h?l=218&ct=xref_jump_to_def&gsn=-%3E>Data >>>>>>>> >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer.h?l=225&ct=xref_jump_to_def&gsn=Data>(); >>>>>>>> } // If set to false, the capacity won't be expanded and when >>>>>>>> appended data // overflows, the overflowed part will be dropped. >>>>>>>> void SetVariableCapacity >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=84&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%25232ib6USbezkKcLs8hjPaCz4GUGrUHdD%25252BeN%25252FKenERnRLA%25253D&gsn=SetVariableCapacity&ct=xref_usages>(bool >>>>>>>> value >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=84&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523vUjrriXMW5FurGjU87jcAlZRQs3b8JSgA4Tt1xrSq7I%25253D&gsn=value&ct=xref_usages>) >>>>>>>> { variable_capacity_ >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=93&ct=xref_jump_to_def&gsn=variable_capacity_> >>>>>>>> = value >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=84&ct=xref_jump_to_def&gsn=value>; >>>>>>>> } private: // Expands the size of m_buffer to size + m_bytesUsed >>>>>>>> bytes. Returns true // iff successful. If reallocation is needed, >>>>>>>> copies only data in // [0, m_bytesUsed) range. bool ExpandCapacity >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=90&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523szv9AYLlP3J7qhn%25252Fm%25252BJqzPmSgWf45%25252BRVwVxvXDk3WYQ%25253D&gsn=ExpandCapacity&ct=xref_usages>(unsigned >>>>>>>> size >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=90&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523mXwymG5xtblCCeS4C9QcnmOwJxql8nYDr2HLqNZVJ8I%25253D&gsn=size&ct=xref_usages>); >>>>>>>> unsigned bytes_used_ >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=92&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523x95FyaH%25252BSeW1SF4BFhX9oIq7qgtHy3xzXCMmc37LcL8%25253D&gsn=bytes_used_&ct=xref_usages>; >>>>>>>> bool variable_capacity_ >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=93&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523FKWGJXbcZ%25252BRuy6YD7uxQ765XV8Mhciv4FM%25252FF5B3bNvU%25253D&gsn=variable_capacity_&ct=xref_usages>; >>>>>>>> scoped_refptr >>>>>>>> <https://cs.chromium.org/chromium/src/base/memory/scoped_refptr.h?l=167&ct=xref_jump_to_def&gsn=scoped_refptr><ArrayBuffer >>>>>>>> >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer.h?l=42&ct=xref_jump_to_def&gsn=ArrayBuffer>> >>>>>>>> buffer_ >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=94&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523aFDjYtlmS2tmLXL2XyJ158HoigBmsAdzguhOSb6XQIw%25253D&gsn=buffer_&ct=xref_usages>; >>>>>>>> DISALLOW_COPY_AND_ASSIGN >>>>>>>> <https://cs.chromium.org/chromium/src/base/macros.h?l=33&ct=xref_jump_to_def&gsn=DISALLOW_COPY_AND_ASSIGN>(ArrayBufferBuilder >>>>>>>> >>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?l=96&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.h%2523E6nSXqAY3ipexrHDKPfjzHqWqWIsAlT3EH3KVhT57GQ%25253D&gsn=ArrayBufferBuilder&ct=xref_usages>);};} >>>>>>>> // namespace WTF >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> How can i understand the structure in memory of an arraybuffer and how >>>>>>>> big is the data field which is pointed by this void pointerHow are >>>>>>>> they represented in memory....How big is the data field ? >>>>>>>> >>>>>>>> >>>>>>>> Il giorno lun 10 set 2018 alle ore 22:19 dan Med < >>>>>>>> litoki...@gmail.com> ha scritto: >>>>>>>> >>>>>>>>> i already did that and btw it is under the WTF/webkit . >>>>>>>>> I'm interested how v8 handles javascript into every detail if u >>>>>>>>> can guide me... >>>>>>>>> Tell me which repository are being used by v8 on the related topic >>>>>>>>> that would help me really much. >>>>>>>>> >>>>>>>>> By when it is called i mean, which javascript code will enable me >>>>>>>>> to call that funciton cause if u click u can't go any further than >>>>>>>>> that, >>>>>>>>> >>>>>>>>> Il giorno lun 10 set 2018 alle ore 21:53 Jakob Kummerow < >>>>>>>>> jkum...@chromium.org> ha scritto: >>>>>>>>> >>>>>>>>>> On Mon, Sep 10, 2018 at 12:22 PM dan Med <litoki...@gmail.com> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> I don't quite see if this google group is useful or not, >>>>>>>>>>> everybody keeps answering me with superficial things, >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> You said you wanted to read the compiler's source but couldn't >>>>>>>>>> find it, so I told you that it's in src/compiler/. If that was not >>>>>>>>>> the >>>>>>>>>> answer you wanted, then try asking a different question? >>>>>>>>>> >>>>>>>>>> Please also keep in mind that people's time is limited. The >>>>>>>>>> easier/quicker it is to answer your question, the more likely you >>>>>>>>>> are to >>>>>>>>>> get an answer. >>>>>>>>>> >>>>>>>>>> i don't care about the trminology like tell me which allocator it >>>>>>>>>>> uses when and why or at least if there's something i can read to >>>>>>>>>>> understand..... >>>>>>>>>>> I'm surprised u don't know what a JIT page is, basically if you >>>>>>>>>>> call a function foo() let's say 100 times then v8,had enough time >>>>>>>>>>> to >>>>>>>>>>> understand the parameters given to that specific function and how >>>>>>>>>>> to >>>>>>>>>>> optimize it efficently based on it's prediction/observation. >>>>>>>>>>> >>>>>>>>>>> I'm not interested in the terminology of things, (that's just a >>>>>>>>>>> matter of reading the source code ) i'm more in reading how it >>>>>>>>>>> works when >>>>>>>>>>> and why.. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> It's great that you want to understand how things work. >>>>>>>>>> Terminology is an important aspect of that though, because it >>>>>>>>>> enables >>>>>>>>>> communication. If we use different words for the same thing, we >>>>>>>>>> won't >>>>>>>>>> understand each other. >>>>>>>>>> Based on your explanation, I'm guessing that by "JIT page" you >>>>>>>>>> mean "the strategy V8 uses to select functions for optimization". >>>>>>>>>> The core >>>>>>>>>> of that logic is in MarkCandidatesForOptimization in >>>>>>>>>> src/runtime-profiler.cc. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> For example when is ArrayBufferBuilder::Append called ?? >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> I don't know; it's not part of V8. But you can use Code Search to >>>>>>>>>> find out where anything is called, just click the function in >>>>>>>>>> question to >>>>>>>>>> get a list of call sites: >>>>>>>>>> https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.h?q=ArrayBufferBuilder&sq=package:chromium&g=0&l=61 >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> And i thing i've looked at the entire v8 source code but didn't >>>>>>>>>>> find much, apart from the array.js file which describes some >>>>>>>>>>> javascript >>>>>>>>>>> function, i don't understand where's the rest.... >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Il giorno lun 10 set 2018 alle ore 20:45 Jakob Kummerow < >>>>>>>>>>> jkum...@chromium.org> ha scritto: >>>>>>>>>>> >>>>>>>>>>>> On Sun, Sep 9, 2018 at 8:54 AM dan Med <litoki...@gmail.com> >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Oh and one more thing, i've surfed perhaps the entire source >>>>>>>>>>>>> code of v8 at least the interesting parts, but what i came across >>>>>>>>>>>>> was just >>>>>>>>>>>>> very short code execpt for some builtins written in javascript i >>>>>>>>>>>>> believe, >>>>>>>>>>>>> can't find all of the things i've found on the documentation such >>>>>>>>>>>>> as the >>>>>>>>>>>>> interpreter >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> src/interpreter/ >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> and the JIT compilers, >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> src/compiler/ >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> one more thing i'd like to understand how the memory is >>>>>>>>>>>>> handeled like how can i read about the JIT pages, >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> What's a JIT page? >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> or which memory allocator does v8 use >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> It uses several allocation techniques for different purposes. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> and it's garbage collector >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> src/heap/ >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Thank you ! >>>>>>>>>>>>> >>>>>>>>>>>>> Il giorno dom 9 set 2018 alle ore 17:51 dan Med < >>>>>>>>>>>>> litoki...@gmail.com> ha scritto: >>>>>>>>>>>>> >>>>>>>>>>>>>> I don't have understood this part, let me explain it to you. >>>>>>>>>>>>>> This is how i get it tell me if i'm wrong at any part. >>>>>>>>>>>>>> >>>>>>>>>>>>>> I need to understand how is the structure in memory of the >>>>>>>>>>>>>> arraybuffer how is it represented and if the data of the array >>>>>>>>>>>>>> are directly >>>>>>>>>>>>>> stored at an offset accessed by buffer_ -> data(). >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> before the call to expand capacity it does create an array >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> the arraybuffer in src >>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/>/third_party >>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/>/blink >>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/>/ >>>>>>>>>>>>>> renderer >>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/> >>>>>>>>>>>>>> /platform >>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/> >>>>>>>>>>>>>> /wtf >>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/> >>>>>>>>>>>>>> /typed_arrays >>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/> >>>>>>>>>>>>>> /array_buffer_builder.cc >>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.cc> >>>>>>>>>>>>>> is >>>>>>>>>>>>>> called whenever the renderer (has to execute some javascript >>>>>>>>>>>>>> which defines >>>>>>>>>>>>>> arraybuffers) >>>>>>>>>>>>>> First when is arraybuffer::append called, cause i know that >>>>>>>>>>>>>> if someone need to reallocate a bigger arraybuffer then a new >>>>>>>>>>>>>> instance will >>>>>>>>>>>>>> be created and filled with the old values if the length in the >>>>>>>>>>>>>> original >>>>>>>>>>>>>> array isn't has much as the user reqeusted ? >>>>>>>>>>>>>> >>>>>>>>>>>>>> One more thing is, when this class is called, the arraybuffer >>>>>>>>>>>>>> is always set to the initial length of static const int >>>>>>>>>>>>>> kDefaultBufferCapacity >>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer_builder.cc?l=38&gs=kythe%253A%252F%252Fchromium%253Flang%253Dc%25252B%25252B%253Fpath%253Dsrc%252Fthird_party%252Fblink%252Frenderer%252Fplatform%252Fwtf%252Ftyped_arrays%252Farray_buffer_builder.cc%2523YXDT7WTpXCAcuhdyTlkuCzsfCzI%25252BoHLRFAlkbCrkx4g%25253D&gsn=kDefaultBufferCapacity&ct=xref_usages> >>>>>>>>>>>>>> >>>>>>>>>>>>>> = 32768; if in the javascript i declare an arraybuffer of >>>>>>>>>>>>>> 20bytes will it allocate of >>>>>>>>>>>>>> 32768bytes anyway =? >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Il giorno mar 4 set 2018 alle ore 12:14 Graham Reeves < >>>>>>>>>>>>>> gra...@grahamreeves.com> ha scritto: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> > is std::numeric_limits >>>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/buildtools/third_party/libc%2B%2B/trunk/include/limits?l=442&ct=xref_jump_to_def&gsn=numeric_limits> >>>>>>>>>>>>>>> <unsigned>::max >>>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/buildtools/third_party/libc%2B%2B/trunk/include/limits?l=450&ct=xref_jump_to_def&gsn=max>(); >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> referring to the max unsigned int value ? cause the source code >>>>>>>>>>>>>>> won't find >>>>>>>>>>>>>>> it >>>>>>>>>>>>>>> Yes, that's the maximum value unsigned (an unsigned int) can >>>>>>>>>>>>>>> be, but what do you mean by, the source won't find it? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Monday, 3 September 2018 19:55:48 UTC+1, dan Med wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Can someone help me out? >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Il giorno sab 1 set 2018 alle ore 15:30 < >>>>>>>>>>>>>>>> litoki...@gmail.com> ha scritto: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> array_buffer_builder.cc in src >>>>>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/>/third_party >>>>>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/>/blink >>>>>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/>/ >>>>>>>>>>>>>>>>> renderer >>>>>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/> >>>>>>>>>>>>>>>>> /platform >>>>>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/> >>>>>>>>>>>>>>>>> /wtf >>>>>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/> >>>>>>>>>>>>>>>>> / >>>>>>>>>>>>>>>>> <https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/wtf/typed_arrays/> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.