473,480 Members | 1,949 Online
Bytes | Software Development & Data Engineering Community
Create Post

Home Posts Topics Members FAQ

bstr and delete[]

Hello,

How does delete[] know how much memory to deallocate from the given
pointer? AFAIK this informations is put there by new[]. new[] puts the
size of the allocated memory before the just before the beginning of the
array. But I couldn't find this information by looking at the memory.
(Via VS2005 - C++)

My second questions is, if there is a mechanism to know how much memory
is allocated for the array, why don't we use it for things like bstr?
Only thing I can think of is you may go and allocate a big chunk of
memory with new[] and use it for more then one bstr's and such. (However
i'm not even sure how you can do it with bstr since you have to use
::SysAllocString)

Thank you in advance,

Furkan
Feb 20 '07 #1
12 3343
On Feb 20, 2:38 pm, yufufi <yufufi_at_comcast.netwrote:
How does delete[] know how much memory to deallocate from the given
pointer? AFAIK this informations is put there by new[]. new[] puts the
size of the allocated memory before the just before the beginning of the
array. But I couldn't find this information by looking at the memory.
(Via VS2005 - C++)
http://www.parashift.com/c++-faq-lit...html#faq-16.14
My second questions is, if there is a mechanism to know how much memory
is allocated for the array, why don't we use it for things like bstr?
Only thing I can think of is you may go and allocate a big chunk of
memory with new[] and use it for more then one bstr's and such. (However
i'm not even sure how you can do it with bstr since you have to use
::SysAllocString)
This part is off-topic here. Try a Microsoft group (cf. the list at
http://www.parashift.com/c++-faq-lit...t.html#faq-5.9)

Cheers! --M

Feb 20 '07 #2
mlimber wrote:
On Feb 20, 2:38 pm, yufufi <yufufi_at_comcast.netwrote:
>How does delete[] know how much memory to deallocate from the given
pointer? AFAIK this informations is put there by new[]. new[] puts the
size of the allocated memory before the just before the beginning of the
array. But I couldn't find this information by looking at the memory.
(Via VS2005 - C++)

http://www.parashift.com/c++-faq-lit...html#faq-16.14
>My second questions is, if there is a mechanism to know how much memory
is allocated for the array, why don't we use it for things like bstr?
Only thing I can think of is you may go and allocate a big chunk of
memory with new[] and use it for more then one bstr's and such. (However
i'm not even sure how you can do it with bstr since you have to use
::SysAllocString)

This part is off-topic here. Try a Microsoft group (cf. the list at
http://www.parashift.com/c++-faq-lit...t.html#faq-5.9)

Cheers! --M
The page you point to answers the question of "How many objects to
destruct?" which is a little bit different then what I'm asking.

In the sample code for one of the delete[] implementations:

// Original code: Fred* p = new Fred[n];
char* tmp = (char*) operator new[] (WORDSIZE + n * sizeof(Fred));
Fred* p = (Fred*) (tmp + WORDSIZE);
*(size_t*)tmp = n;
size_t i;
try {
for (i = 0; i < n; ++i)
new(p + i) Fred(); // Placement new
}
catch (...) {
while (i-- != 0)
(p + i)->~Fred(); // Explicit call to the destructor
operator delete[] ((char*)p - WORDSIZE);
throw;
}

'n' used to decide number of destructor calls needed. But in the line
one before the last:

operator delete[] ((char*)p - WORDSIZE);

Still compiler is presented with a pointer to an array(which in it's
first WORDSIZE has n)

1) Isn't this an infinite loop(recursive)?
2) If the second one is somehow a different delete[], will it act like:
operator delete[] (*p)
{
arraySize = (((WORDSIZE *)p)[0])*sizeOf(Fred)
InternalDelete(p,arraySize);

}

Thank you,
Feb 20 '07 #3
yufufi wrote:
mlimber wrote:
>On Feb 20, 2:38 pm, yufufi <yufufi_at_comcast.netwrote:
>>How does delete[] know how much memory to deallocate from the given
pointer? AFAIK this informations is put there by new[]. new[] puts the
size of the allocated memory before the just before the beginning of the
array. But I couldn't find this information by looking at the memory.
(Via VS2005 - C++)

http://www.parashift.com/c++-faq-lit...html#faq-16.14
>>My second questions is, if there is a mechanism to know how much memory
is allocated for the array, why don't we use it for things like bstr?
Only thing I can think of is you may go and allocate a big chunk of
memory with new[] and use it for more then one bstr's and such. (However
i'm not even sure how you can do it with bstr since you have to use
::SysAllocString)

This part is off-topic here. Try a Microsoft group (cf. the list at
http://www.parashift.com/c++-faq-lit...t.html#faq-5.9)

Cheers! --M

The page you point to answers the question of "How many objects to
destruct?" which is a little bit different then what I'm asking.

In the sample code for one of the delete[] implementations:
You're confused. This is not a delete[] implementation-- this is a
new[] implementation. The call to operator delete[] is in a catch block
which is there to prevent a memory leak in case one of the constructor
"calls" to Fred (via placement new) fails.
>
// Original code: Fred* p = new Fred[n];
char* tmp = (char*) operator new[] (WORDSIZE + n * sizeof(Fred));
Fred* p = (Fred*) (tmp + WORDSIZE);
*(size_t*)tmp = n;
size_t i;
try {
for (i = 0; i < n; ++i)
new(p + i) Fred(); // Placement new
}
catch (...) {
while (i-- != 0)
(p + i)->~Fred(); // Explicit call to the destructor
operator delete[] ((char*)p - WORDSIZE);
throw;
}

'n' used to decide number of destructor calls needed. But in the line
one before the last:

operator delete[] ((char*)p - WORDSIZE);

Still compiler is presented with a pointer to an array(which in it's
first WORDSIZE has n)

1) Isn't this an infinite loop(recursive)?
No. As I already said, this is an implementation of new[] not of
delete[]. More to the point of your question, there's a distinction
between new[] and operator new[], and likewise for delete[] and operator
delete[]. The first versions not only allocate (or deallocate) memory
via operator new[] (or operator delete[]), they also construct (or
destruct) the array of objects. The second versions are basically
concerned with just low-level allocation and deallocation.
2) If the second one is somehow a different delete[], will it act like:
operator delete[] (*p)
{
arraySize = (((WORDSIZE *)p)[0])*sizeOf(Fred)
InternalDelete(p,arraySize);

}
Something like that, for an appropriately defined InternalDelete
function. It needs to free the memory allocated above by operator new[]
which was: WORDSIZE + n * sizeof( Fred).

-Mark
Feb 20 '07 #4
Mark P wrote:
yufufi wrote:
>mlimber wrote:
>>On Feb 20, 2:38 pm, yufufi <yufufi_at_comcast.netwrote:
How does delete[] know how much memory to deallocate from the given
pointer? AFAIK this informations is put there by new[]. new[] puts the
size of the allocated memory before the just before the beginning of
the
array. But I couldn't find this information by looking at the memory.
(Via VS2005 - C++)

http://www.parashift.com/c++-faq-lit...html#faq-16.14

My second questions is, if there is a mechanism to know how much memory
is allocated for the array, why don't we use it for things like bstr?
Only thing I can think of is you may go and allocate a big chunk of
memory with new[] and use it for more then one bstr's and such.
(However
i'm not even sure how you can do it with bstr since you have to use
::SysAllocString)

This part is off-topic here. Try a Microsoft group (cf. the list at
http://www.parashift.com/c++-faq-lit...t.html#faq-5.9)

Cheers! --M

The page you point to answers the question of "How many objects to
destruct?" which is a little bit different then what I'm asking.

In the sample code for one of the delete[] implementations:

You're confused. This is not a delete[] implementation-- this is a
new[] implementation. The call to operator delete[] is in a catch block
which is there to prevent a memory leak in case one of the constructor
"calls" to Fred (via placement new) fails.
>>
// Original code: Fred* p = new Fred[n];
char* tmp = (char*) operator new[] (WORDSIZE + n * sizeof(Fred));
Fred* p = (Fred*) (tmp + WORDSIZE);
*(size_t*)tmp = n;
size_t i;
try {
for (i = 0; i < n; ++i)
new(p + i) Fred(); // Placement new
}
catch (...) {
while (i-- != 0)
(p + i)->~Fred(); // Explicit call to the destructor
operator delete[] ((char*)p - WORDSIZE);
throw;
}

'n' used to decide number of destructor calls needed. But in the line
one before the last:

operator delete[] ((char*)p - WORDSIZE);

Still compiler is presented with a pointer to an array(which in it's
first WORDSIZE has n)

1) Isn't this an infinite loop(recursive)?

No. As I already said, this is an implementation of new[] not of
delete[]. More to the point of your question, there's a distinction
between new[] and operator new[], and likewise for delete[] and operator
delete[]. The first versions not only allocate (or deallocate) memory
via operator new[] (or operator delete[]), they also construct (or
destruct) the array of objects. The second versions are basically
concerned with just low-level allocation and deallocation.
> 2) If the second one is somehow a different delete[], will it act
like:
operator delete[] (*p)
{
arraySize = (((WORDSIZE *)p)[0])*sizeOf(Fred)
InternalDelete(p,arraySize);
}

Something like that, for an appropriately defined InternalDelete
function. It needs to free the memory allocated above by operator new[]
which was: WORDSIZE + n * sizeof( Fred).

-Mark
Ok, my mistake I pasted the wrong code sample. Here is the correct one.

definition of operator delete[]:

size_t n = * (size_t*) ((char*)p - WORDSIZE);
while (n-- != 0)
(p + n)->~Fred();
operator delete[] ((char*)p - WORDSIZE);

Same questions apply here
1) isn't this recursive?
I guess you answer this one with the difference of 'operator new[]'
and 'new[]' Ok then am I allowed to call the second, low level
new/delete, which don't care about constr/destr but just memory
allocation? Why not use malloc/free instead of these?
2) how does the last delete[] know about the size?
3) How does free (for malloc) know how much memory to free starting
from the pointed memory location. It doesn't have constructor/destructor
mechanism so it doesn't need to put 'n' before the allocated array
memory. I guess answer to this would be also an answer to 2. (guessing
that new[] is actually malloc+constructors and delete[] is free+destructors)

Thank you,

yufufi
Feb 21 '07 #5
* yufufi:
>
definition of operator delete[]:
No, this isn't a definition of operator delete[].

You're quoting the FAQ item "How do compilers use "over-allocation" to
remember the number of elements in an allocated array?", currently
available at <url:
http://www.parashift.com/c++-faq-lite/compiler-dependencies.html#faq-38.7>.

That FAQ item describes the code thusly:

"Then the delete[] p statement becomes:"

A "delete[] p" statement is not a simple call to operator delete[].

This has been explained to you already in this thread, and furthermore
the FAQ item's code exemplifies just that (you should also take a look
at the next FAQ item for an alternative way this can be done by the
compiler).

size_t n = * (size_t*) ((char*)p - WORDSIZE);
while (n-- != 0)
(p + n)->~Fred();
operator delete[] ((char*)p - WORDSIZE);

Same questions apply here
1) isn't this recursive?
No. The last statement isn't a "delete[] p" statement. It's an
invocation of operator delete[]. operator delete[] is a simple
deallocation function. It would probably have been better if was named
e.g. "deallocateArray" instead of the confusing "operator delete[]", but
then we wouldn't have so much fun discussing C++.
[snip]
2) how does the last delete[] know about the size?
The FAQ item you were directed to, which led you to the above, answers
that. As an alternative to clicking willy-nilly on the links, why don't
you /read/ it instead? That would most certainly help you.

Cheers,

- Alf

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Feb 21 '07 #6
Alf P. Steinbach wrote:
* yufufi:
>>
definition of operator delete[]:

No, this isn't a definition of operator delete[].

You're quoting the FAQ item "How do compilers use "over-allocation" to
remember the number of elements in an allocated array?", currently
available at <url:
http://www.parashift.com/c++-faq-lite/compiler-dependencies.html#faq-38.7>.

That FAQ item describes the code thusly:

"Then the delete[] p statement becomes:"
What I understand from 'becomes' is that when you debug into that
function call you'll see similar lines to these..
>
A "delete[] p" statement is not a simple call to operator delete[].

This has been explained to you already in this thread, and furthermore
the FAQ item's code exemplifies just that (you should also take a look
at the next FAQ item for an alternative way this can be done by the
compiler).

>size_t n = * (size_t*) ((char*)p - WORDSIZE);
while (n-- != 0)
(p + n)->~Fred();
operator delete[] ((char*)p - WORDSIZE);

Same questions apply here
1) isn't this recursive?

No. The last statement isn't a "delete[] p" statement. It's an
invocation of operator delete[]. operator delete[] is a simple
deallocation function. It would probably have been better if was named
e.g. "deallocateArray" instead of the confusing "operator delete[]", but
then we wouldn't have so much fun discussing C++.

How does 'operator delete[]/deallocateArray' know about the size of the
memory to free? You only give it a starting point(a pointer) but it
doesn't have any endpoints. Maybe it can use the 'n' but that doesn't
sound right.

Let's forget about delete[] and focus on free(*p) (i know it's for c
world but i have a point). Does malloc put any information to somewhere
so that free knows how much memory to free starting from p?

[snip]
> 2) how does the last delete[] know about the size?

The FAQ item you were directed to, which led you to the above, answers
that. As an alternative to clicking willy-nilly on the links, why don't
you /read/ it instead? That would most certainly help you.
FAQ item 38.7 or 38.8 don't answer my question. It answers the question
of "How many destructors to run?" Freeing up part is done in:
operator delete[] ((char*)p - WORDSIZE);
I'm asking what's going on behind the scenes when you execute this
statement.

Thank you,

yufufi




Feb 21 '07 #7
* yufufi:
FAQ item 38.7 or 38.8 don't answer my question. It answers the question
of "How many destructors to run?" Freeing up part is done in:
operator delete[] ((char*)p - WORDSIZE);
I'm asking what's going on behind the scenes when you execute this
statement.
Very simple, the global "operator delete[]" function is called, and
deallocates the memory.

How does it know how much memory to deallocate?

Either directly, in /one of the same ways/ as a delete[]-statement knows
how many destructors to call (the FAQ illustrates two such ways), or by
leaving that to e.g. the OS allocator, which does the same. In practice
only the two ways outlined in the FAQ are used, namely overallocation
with prepended size, or associative array. In theory other ways could
be used, such as traversing a linked list of free blocks and ensuring
that an allocated block always has a free block on each side, but that
would just amount to a very inefficient associative collection.

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Feb 21 '07 #8
yufufi wrote:
Alf P. Steinbach wrote:
>* yufufi:
>>>
definition of operator delete[]:

No, this isn't a definition of operator delete[].

You're quoting the FAQ item "How do compilers use "over-allocation" to
remember the number of elements in an allocated array?", currently
available at <url:
http://www.parashift.com/c++-faq-lite/compiler-dependencies.html#faq-38.7>.
That FAQ item describes the code thusly:

"Then the delete[] p statement becomes:"
What I understand from 'becomes' is that when you debug into that
function call you'll see similar lines to these..
>>
A "delete[] p" statement is not a simple call to operator delete[].

This has been explained to you already in this thread, and furthermore
the FAQ item's code exemplifies just that (you should also take a look
at the next FAQ item for an alternative way this can be done by the
compiler).

>>size_t n = * (size_t*) ((char*)p - WORDSIZE);
while (n-- != 0)
(p + n)->~Fred();
operator delete[] ((char*)p - WORDSIZE);

Same questions apply here
1) isn't this recursive?

No. The last statement isn't a "delete[] p" statement. It's an
invocation of operator delete[]. operator delete[] is a simple
deallocation function. It would probably have been better if was
named e.g. "deallocateArray" instead of the confusing "operator
delete[]", but then we wouldn't have so much fun discussing C++.


How does 'operator delete[]/deallocateArray' know about the size of the
memory to free? You only give it a starting point(a pointer) but it
doesn't have any endpoints. Maybe it can use the 'n' but that doesn't
sound right.
Why not? Look at the code you posted. Given p, it steps back by
WORDSIZE and reads the value of n. What more information do you think
it should need?
>
Let's forget about delete[] and focus on free(*p) (i know it's for c
world but i have a point). Does malloc put any information to somewhere
so that free knows how much memory to free starting from p?
Probably. This is also implementation dependent so it can do whatever
it wants. But it has to *work* and so, yes, it probably records this
information somewhere.

-Mark
Feb 21 '07 #9
Mark P wrote:
yufufi wrote:
>Alf P. Steinbach wrote:
>>* yufufi:

definition of operator delete[]:

No, this isn't a definition of operator delete[].

You're quoting the FAQ item "How do compilers use "over-allocation"
to remember the number of elements in an allocated array?", currently
available at <url:
http://www.parashift.com/c++-faq-lite/compiler-dependencies.html#faq-38.7>.
That FAQ item describes the code thusly:

"Then the delete[] p statement becomes:"
What I understand from 'becomes' is that when you debug into that
function call you'll see similar lines to these..
>>>
A "delete[] p" statement is not a simple call to operator delete[].

This has been explained to you already in this thread, and
furthermore the FAQ item's code exemplifies just that (you should
also take a look at the next FAQ item for an alternative way this can
be done by the compiler).
size_t n = * (size_t*) ((char*)p - WORDSIZE);
while (n-- != 0)
(p + n)->~Fred();
operator delete[] ((char*)p - WORDSIZE);

Same questions apply here
1) isn't this recursive?

No. The last statement isn't a "delete[] p" statement. It's an
invocation of operator delete[]. operator delete[] is a simple
deallocation function. It would probably have been better if was
named e.g. "deallocateArray" instead of the confusing "operator
delete[]", but then we wouldn't have so much fun discussing C++.


How does 'operator delete[]/deallocateArray' know about the size of
the memory to free? You only give it a starting point(a pointer) but
it doesn't have any endpoints. Maybe it can use the 'n' but that
doesn't sound right.

Why not? Look at the code you posted. Given p, it steps back by
WORDSIZE and reads the value of n. What more information do you think
it should need?
That information is useful for the number of destructors to call not for
the amount of memory to free. Sure you can do n*sizeof(Fred), but last
call to operator delete[] doesn't know about 'Fred'. You only pass the
address not the Type as well.
>>
Let's forget about delete[] and focus on free(*p) (i know it's for c
world but i have a point). Does malloc put any information to
somewhere so that free knows how much memory to free starting from p?

Probably. This is also implementation dependent so it can do whatever
it wants. But it has to *work* and so, yes, it probably records this
information somewhere.
I'm trying to figure out where does it record this information.. Just
for 'Fun' purposes.

Thank you very much,

yufufi
Feb 21 '07 #10
Alf P. Steinbach wrote:
* yufufi:
>FAQ item 38.7 or 38.8 don't answer my question. It answers the
question of "How many destructors to run?" Freeing up part is done in:
operator delete[] ((char*)p - WORDSIZE);
I'm asking what's going on behind the scenes when you execute this
statement.

Very simple, the global "operator delete[]" function is called, and
deallocates the memory.

How does it know how much memory to deallocate?

Either directly, in /one of the same ways/ as a delete[]-statement knows
how many destructors to call (the FAQ illustrates two such ways), or by
leaving that to e.g. the OS allocator, which does the same. In practice
only the two ways outlined in the FAQ are used, namely overallocation
with prepended size, or associative array. In theory other ways could
be used, such as traversing a linked list of free blocks and ensuring
that an allocated block always has a free block on each side, but that
would just amount to a very inefficient associative collection.
So you are suggesting that we may have a memory like this for some
implementation:

[Size Of Array In Bytes][Number of Objects][Memory for the user]

When you call new[] it goes and calls operator new[] which somehow gets
the memory. And then it puts 'Size Of Array In Bytes' to the beginning
and returns it to the new[]. Then new puts 'Number of Objects' to the
beginning of that and then returns it to the user.

Thank you very much,

Furkan
Feb 21 '07 #11
yufufi wrote:
Mark P wrote:
>Probably. This is also implementation dependent so it can do whatever
it wants. But it has to *work* and so, yes, it probably records this
information somewhere.
I'm trying to figure out where does it record this information.. Just
for 'Fun' purposes.
Repeat what mark wrote after me . This Is Implementation Dependent.

Some allocators may store the length. Others may not. I once wrote an
allocator that had an overhead of two bits per allocated block. That's
right, a total of two bits. Obviously it didn't store a length.

So for all intents and purposes you can call it "magic". For further
details, you need to ask in a group dedicated to your compiler and platform.

Feb 21 '07 #12
yufufi wrote:
Alf P. Steinbach wrote:
>* yufufi:
>>FAQ item 38.7 or 38.8 don't answer my question. It answers the
question of "How many destructors to run?" Freeing up part is done in:
operator delete[] ((char*)p - WORDSIZE);
I'm asking what's going on behind the scenes when you execute this
statement.

Very simple, the global "operator delete[]" function is called, and
deallocates the memory.

How does it know how much memory to deallocate?

Either directly, in /one of the same ways/ as a delete[]-statement
knows how many destructors to call (the FAQ illustrates two such
ways), or by leaving that to e.g. the OS allocator, which does the
same. In practice only the two ways outlined in the FAQ are used,
namely overallocation with prepended size, or associative array. In
theory other ways could be used, such as traversing a linked list of
free blocks and ensuring that an allocated block always has a free
block on each side, but that would just amount to a very inefficient
associative collection.

So you are suggesting that we may have a memory like this for some
implementation:

[Size Of Array In Bytes][Number of Objects][Memory for the user]

When you call new[] it goes and calls operator new[] which somehow gets
the memory. And then it puts 'Size Of Array In Bytes' to the beginning
and returns it to the new[]. Then new puts 'Number of Objects' to the
beginning of that and then returns it to the user.

Thank you very much,

Furkan
That would be a valid implementation. I would expect, where possible,
for the implementation to optimize away the "Number of Objects", though.
If you know the size in bytes, and you know the size of one object,
then you know the number of objects.

--
Alan Johnson
Feb 21 '07 #13

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
5705
by: Chris | last post by:
I am not sure if this is the right newsgroup. But does anyone know what is the difference between a BSTR and a LPOLESTR? The only thing I could find out is that the advantage of taking BSTR...
7
7071
by: Gilad Walden | last post by:
I use C# in .NET framework. I have an ActiveX implemented in C++ that has a COM interface method that gets as it’s out parameter a BSTR* . The interop translates this BSTR* into C# string. From...
8
5181
by: Michael Tissington | last post by:
I have a C++ function in a DLL of the form BSTR WINAPI DoSomeWork(LPCSTR szConnection, LPCSTR szGUID) I use SysAllocStringByteLen to return a BSTR. For the most part this works accept when...
0
1258
by: Edwin Knoppert | last post by:
I'm currently using a wrapper which converts an ANSI BSTR from a dll. (Yes, singlebyte but BSTR ! ) This works fine and i'm aware BSTR's returned must be destroyed by the caller, which i do. ...
5
2646
by: bluter | last post by:
We have server components which were created by a third party and compiled in VC++5 (sp3). They run fine on NT4 and 2000, however during testing of our migration to Server 2003, these components...
37
5387
by: Egbert Nierop \(MVP for IIS\) | last post by:
In win32 mode, a BSTR was UINT length prefixed and terminated exactly by a zero char. So if you allocated "Hello World" that would allocate 28 bytes. In x64 and (IA64 as well) it would become...
4
6085
by: Abubakar | last post by:
Hi, Lets say I write this line: BSTR b = m_pdoc->Getxml (); where m_pdoc is MSXML2::IXMLDOMDocumentPtr. Now "b" contains the xml text. When I exit the function in which this line is written,...
2
1522
by: Lucy Ludmiller | last post by:
How can I write a function like this: BSTR Greeting(BSTR name) { //return "Good Morning : " + name ; } In short I'm looking for a quick tutorial on using BSTR - Google is not bringing up...
2
5810
by: mzdude | last post by:
I need to interface with a windows DLL that has the following signature extern "C" void Foo( BSTR in, BSTR *out ) Code so far Traceback (most recent call last): File "<pyshell#14>", line...
0
7076
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
1
6730
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
6873
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
5321
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
1
4767
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
4471
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
2990
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...
0
1294
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
1
558
muto222
php
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.